本帖最后由 小鲁哥哥 于 2017-7-24 11:44 编辑
【黑马程序员济南】PHP课程同步笔记:类中成员
类中成员 包括: 类常量; 属性分为静态属性和实例属性; 方法分为静态方法和实例方法; 细化: class 类名{ //类常量: //const 常量名 = 常量值; //必须在此时赋值! const PI = 3.14; //实例属性: var $p1 = 1; //赋值 var $p2 ; //不赋值 //静态属性: static $p3 = 3; //赋值; static $p4 ; //不赋值 //实例方法: function f1(.....){ 。。。。。 } //静态方法: static function f2( .... ) { 。。。。。} } 类常量
其实就是常量,无非,其定义在一个类中; 定义形式: class 类名{ const 常量名 = 值; //值只能是“直接值”(字面值) } 使用形式: 类名::常量名 class A{ const PI = 3.14; } echo A::PI; $s = A::PI * 2 * 2; //算半径为2的圆面积; 实例属性和静态属性
实例属性:只能该类的对象来使用: $对象->实例属性名; 静态属性:只能该类本身来使用: 类名::$静态属性名 重要区别: 实例属性是可以随着对象的增多,而可以变成“多份数据”,而静态属性,对一个类来说,就只有一份! [PHP] 纯文本查看 复制代码 <?php
//传智播客出品
//演示实例属性和静态属性的使用和区别
class A{
var $p1 = 1;
var $p2;
static $p3 = 3;
static $p4;
}
//创建一个A的对象
$a1 = new A();
$a1->p1 = 11;
$a1->p2 = 22;
A::$p3 = 33;
A::$p4 = 44;
//创建另一个A对象
$a2 = new A();
$a2->p1 = 111;
$a2->p2 = 222;
A::$p3 = 333;
A::$p4 = 444;
var_dump($a1);
echo "<br />";
var_dump($a2);
echo "<br />";
echo A::$p3;
echo "<br />";
//删除静态属性
//unset(A::$p4); 删除静态属性会报致命错误导致后面代码无法执行
echo A::$p4;
echo "<br />";
//删除实例属性
unset($a1->p1);
var_dump($a1); 执行结果为: object(A)#1 (2) {["p1"]=>int(11) ["p2"]=>int(22)} object(A)#2 (2) {["p1"]=>int(111) ["p2"]=>int(222)} 333 444 object(A)#1 (1) {["p2"]=>int(22)} 通常,静态属性,用于存储一个类的所有对象的共有特性信息,比如: [PHP] 纯文本查看 复制代码 <?php
//传智播客出品
class Student{
var $name = "";
static $count = 0;
}
$s1 = new Student();
$s1->name = "张三";
Student::$count++;
$s2 = new Student();
$s2->name = "李四";
Student::$count++;
伪变量(关键字)$this
它只能用在一个类的一个方法中; 它代表一个对象; 它代表调用该方法的对象——任何方法,一定是某个“对象”来调用 实例方法和静态方法实例方法: 就是一个类的对象所“拥有”的方法; 每个类,都可能有多个对象; 每个对象,执行该方法,都可能会得到不同的结果。
注意:只要在一个类中定义了一个实例方法,则该类的对象,就一定会拥有该方法;
调用: $对象变量->实例方法名(....); 静态方法: 就是一个类本身所拥有的方法; 调用: 类名::静态方法( ... ); [PHP] 纯文本查看 复制代码 <?php
//传智播客出品
class A{
var $name;
var $age = 18;
function IntroMe(){
echo "<p>大家好";
echo "<br />我叫".$this->name;
echo "<br />我今年".$this->age."岁</p>";
}
static function f2(){
echo "<p>这是A类中的一个静态方法f2</p>";
}
}
$a1 = new A();
$a1->name = "张三";
$a1->age = 22;
$a1->IntroMe();
A::f2();
$a2 = new A();
$a2->name = "李四";
$a2->age = 23;
$a2->IntroMe();
A::f2();
输出的结果为: 大家好
我叫张三
我今年22岁
这是A类中的一个静态方法f2
大家好
我叫李四
我今年23岁
这是A类中的一个静态方法f2
|