第七章:第2节 PHP面向对象——简单定义与调用

更新于:2017-05-22 20:29:00

继续看上节课的代码:



原来(在面向过程)的语法中,我们的代码有如下几种代码:

定义变量;

定义函数;

使用变量(输出,赋值,等)

调用函数;

流程控制(if,switch,for,while等)


在面向对象的语法中,则情况就发生变化了:

定义类的语法中,只有这3种代码:

定义属性(变量)

定义方法(函数)

定义常量(类常量)


定义的属性、类常量、方法等成员没有先后顺序,通常大家都会先定义属性(把属性定义写在方法定义的前边),再定义方法。


定义属性:


“public”是PHP的关键字,公开的意思,类里的三个访问修饰符(public、protected、private)之一。

属性声明是必须由关键字public或者protected或者 private开头,然后跟一个变量来组成,如果没有这三个关键字会报错的(也可以用var,var是“public”一个别名,正式用public更好)。

访问修饰符做什么用呢?给属性和方法设置权限,“public”给予的权限最高,可以在对象外面直接调用类里的成员属性或方法。

访问修饰符后面再做详细讲解。


定义属性可以设置默认值,默认值必须是一个具体的值(常量也可以),不能是一个变量、计算表达式或函数。

错误写法:

public $v1 = 1+3;   //右边不能是计算表达式

public $v2 = $v2;  //右边不能是变量

public $v3 = time();  //右边不能是函数


定义方法:


方法定义跟在类外面函数定义几乎一样,方法里的代码也没有特殊要求。


方法前面也有访问修饰符,它是可以省略的,没有则默认访问修饰符是“public”,而属性不能省略。


创建类的对象:


当类创建好之后,只是一个“死代码”(类似一个变量定义好),我们通常需要使用该类才能发挥该类的作用,“创造该类的一个对象”,用new关键字创建。


属性或方法的调用:


对象创建后就要用类的属性和方法,我们怎么去调用属性和方法呢?形式如下:

属性: $对象变量->属性名

方法: $对象变量->方法名()


方法中的$this关键字:


我们不仅可以在类外面调用对象的属性和方法,在类里面也可以,用$this关键字。


$this是一个“伪对象”,代表当前所属类的当前对象。


在类外面实例化成对象$p1时,类里的$this相当于是$p1了;在类外面实例化成对象$p2时,类里的$this相当于是$p2了。


类常量的调用:


一个类不实例化成对象是不是就彻底不能用了?那也不是。一般的属性和一般方法必须要实例化成对象才可以调用,有些成员可以直接用。


1.png

1.png


类常量GJ从上面代码中可以找到三种调用方式:$p1::GJ、$p2::GJ、Person::GJ


如果我们直接这样用$p1->GJ就会报错

1.png


其实是这样的:类常量它是这个类所有对象共享的数据,不是单属于某一个对象的数据,所以不能用“->”方式调用。类里面还有静态属性、静态方法,它们都属于所有对象共享的,这些共享属性和方法需要用“::”调用,推荐大家直接用“类名::”(第25行代码)这种方式调用,用“对象变量::”调用对PHP版本有要求的。


1.png


本节学习代码》》》