继续看上节课的代码:
原来(在面向过程)的语法中,我们的代码有如下几种代码:
定义变量;
定义函数;
使用变量(输出,赋值,等)
调用函数;
流程控制(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了。
类常量的调用:
一个类不实例化成对象是不是就彻底不能用了?那也不是。一般的属性和一般方法必须要实例化成对象才可以调用,有些成员可以直接用。
类常量GJ从上面代码中可以找到三种调用方式:$p1::GJ、$p2::GJ、Person::GJ
如果我们直接这样用$p1->GJ就会报错
其实是这样的:类常量它是这个类所有对象共享的数据,不是单属于某一个对象的数据,所以不能用“->”方式调用。类里面还有静态属性、静态方法,它们都属于所有对象共享的,这些共享属性和方法需要用“::”调用,推荐大家直接用“类名::”(第25行代码)这种方式调用,用“对象变量::”调用对PHP版本有要求的。