【黑马程序员济南】PHP课程同步笔记day27:类中成员
类中成员
包括:
类常量;
属性分为静态属性和实例属性;
方法分为静态方法和实例方法;
细化:
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的圆面积;
实例属性和静态属性
实例属性:只能该类的对象来使用:
$对象->实例属性名;
静态属性:只能该类本身来使用:
类名::$静态属性名
重要区别:
实例属性是可以随着对象的增多,而可以变成“多份数据”,而静态属性,对一个类来说,就只有一份!
[mw_shl_code=php,true]
//传智播客出品
//演示实例属性和静态属性的使用和区别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 "
";
var_dump($a2);
echo "
";
echo A::$p3;
echo "
";
//删除静态属性
//unset(A::$p4); 删除静态属性会报致命错误导致后面代码无法执行echo A::$p4;
echo "
";
//删除实例属性
unset($a1->p1);
var_dump($a1);[/mw_shl_code]
执行结果为:
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)}
通常,静态属性,用于存储一个类的所有对象的共有特性信息,比如:[mw_shl_code=php,true]
//传智播客出品
class Student{
var $name = "";
static $count = 0;
}
$s1 = new Student();
$s1->name = "张三";
Student::$count++;
$s2 = new Student();
$s2->name = "李四";
Student::$count++;
[/mw_shl_code]
伪变量(关键字)$this
它只能用在一个类的一个方法中;
它代表一个对象;
它代表调用该方法的对象——任何方法,一定是某个“对象”来调用实例方法和静态方法
实例方法:
就是一个类的对象所“拥有”的方法;
每个类,都可能有多个对象;
每个对象,执行该方法,都可能会得到不同的结果。
注意:只要在一个类中定义了一个实例方法,则该类的对象,就一定会拥有该方法;
调用:
$对象变量->实例方法名(....);
静态方法:
就是一个类本身所拥有的方法;
调用:
类名::静态方法( ... );
[mw_shl_code=php,true]
//传智播客出品
class A{
var $name;
var $age = 18;
function IntroMe(){
echo "
大家好";
echo "
我叫".$this->name;
echo "
我今年".$this->age."岁
}
static function f2(){
echo "
这是A类中的一个静态方法f2
";}
}
$a1 = new A();
$a1->name = "张三";
$a1->age = 22;
$a1->IntroMe();
A::f2();
$a2 = new A();
$a2->name = "李四";
$a2->age = 23;
$a2->IntroMe();
A::f2();
[/mw_shl_code]
输出的结果为:
大家好
我叫张三
我今年22岁
这是A类中的一个静态方法f2
大家好
我叫李四
我今年23岁
这是A类中的一个静态方法f2