PHP面向对象(一):类与类的实例化

1)、类、对象、实例的关系

类是对象的抽象,对象是类的具体化,实例是对象的另一种名称。

2)、类的定义

①、成员属性(变量)的定义与使用

成员属性必须 var public protected private

语法:

形式1var  $v1 ;     //定义不赋值

形式2 var  $v2 = 2; //定义的同时可以赋值,该值只能是“直接值”,常量(值),不能是变量值,也不能是“计算表达式”

形式3public  $v1;

形式4public  $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函数。

【注】

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章