1)、类、对象、实例的关系
类是对象的抽象,对象是类的具体化,实例是对象的另一种名称。
2)、类的定义
①、成员属性(变量)的定义与使用
成员属性必须 var public protected private
语法:
形式1:var $v1 ; //定义不赋值
形式2: var $v2 = 2; //定义的同时可以赋值,该值只能是“直接值”,常量(值),不能是变量值,也不能是“计算表达式”
形式3:public $v1;
形式4:public $2 = 2; //其实var是“public”一个别名,正式用public更好。
作用:对事物特征的描述。
错误形式:
$v1 = 1;
var $v2 = 1+3; //右边不能是计算表达式
public $v3 = $v2; //右边不能是变量
使用形式:
$对象->属性名;//注意:属性名前面没有$符号。
②、成员方法(函数)的定义与使用
语法:关键字(缺省时默认public) + function + 名称(参数)
定义成员方法的时候可以加参数也可以不加参数
③、this,self,parent三个关键字
this就是指向当前对象实例的指针,不指向任何其他对象或类。
self通常只能在某个类的某个方法内部代表该类的名称。
parent如果想在子类中调用父类的同名方法,那么请你使用关键字parent::+方法名()
④、php链式调用原理
在一个类中有多个方法,当你实例化这个类,并调用方法时只能一个一个调用
如果要实现链式调用,这要在方法的结束添加return $this即可。
3)、static关键字
static 关键字来定义静态方法和属性。static 也可用于定义静态变量以及后期静态绑定
①、静态类:
PHP中和Java中一样:如果一个类要被声明为static的,只有一种情况,就是静态内部类。
类中成员有:静态的和非静态的,而静态类只有一种,那就是静态内部类。
②、静态成员
静态属性:只隶属于类本身——也可以看做是所有对象的“共有数据”。
使用:类::$静态属性名
静态方法:同样隶属于类,而不是隶属于具体对象。
使用:类名::静态方法名();
【注】1、静态方法中只能调用静态属性和静态方法,不能调用非静态属性和方法,self::方法名()、self::属性名
2、动态方法中静态方法和动态方法都可以调用,如果在同一个类中:
调用静态方法使用:self::方法名()、self::属性名,
调用动态方法用this−>方法名()、this−>方法名()、this->属性名
3、只有实例化的时候才会自动调用构造函数,所以只有动态类才可以触发构造函数,静态类不会触发构造函数
4、由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
5、静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象。
6、自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
③、后期静态绑定:
Self:通常只能在某个类的某个方法内部代表该类的名称,所以指向当前A类的who方法,static有后期绑定的概念,所以指向B类,因为是B在调用test方法,所以指向B类,而B类中有who方法。
4)、类常量(const关键字)
1:类里面定义的常量,用const定义,常量是属于类的,不是对象的。
2:定义类中的常量的时候必须给初始值
3:在使用类中的常量的时候,要使用类名::+常量名或者self::+常量名来调用
4:在类的外部调用类的常量,只能使用类名::+常量名来调用
5:类中定义的常量只归类所有,不归对象所有,不能通过对象来调用
类内部调用类常量:
类外部调用类常量:
5)、范围解析操作符(::)
作用:可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。
实例1:类的外部使用 :: 操作符
实例2:self,parent 和 static 这三个特殊的关键字是用于在类内部对其属性或方法进行访问的
实例3:调用父类的方法
6)、实例化中的问题
实例化对象的格式为:
$变量名 = new 类名(); //括号里可传参数
给对象中的成员属性赋值的格式为:
$引用名 ->成员属性 = 值;
调用对象中的成员方法的格式为:
$引用名 -> 成员方法;
成员方法使用成员属性的格式为
$this -> 成员属性;
实例化对象时参数问题:
1:当我们实例化一个php类的时候,要怎么传递参数呢?这取决于该类的构造方法。
2:可以通过var_dump()打印对象,不过只能打印对象的属性,它的方法不能打印出来。
3:要想获取对象的方法列表,可以用get_class_methods函数。
【注】