编辑
2026-04-01
undefined
00

目录

$this self:: parent::
类常量
方法重写
抽象类
接口
Trait
解决冲突
魔术方法
构造&析构方法
set()和get()
isset()和unset()
call()和callStatic()

$this self:: parent::

$this是当前对象的引用,一般出现在方法里,用于获取类的成员属性,或执行类的成员方法。

self::是对本类的引用,用于获取当前类的静态成员属性或静态成员方法。

parent::是对父类的引用。用于调用父类的方法或属性。

类常量

使用const来定义类常量,使用self::来调用类常量。

<?php class A { const YES = 1; public function aa() { return self::YES; } } echo (new A)->aa(); //1

方法重写

子类可以重写父类的方法,但使用final声明的方法,将禁止在子类中重写父类方法。

抽象类

具有抽象方法的类为抽象类,抽象方法即为没有内容的空方法,要求子类进行完善内容,抽象类不能实例化,只能继承。

继承一个抽象类的时候,方法的可见性必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不能定义private。

<?php abstract class A { // 强制要求子类定义这些方法 abstract protected function a1(); abstract protected function a2($aa); // 普通方法(非抽象方法) public function print() { echo '不用强制定义该方法'; } } class B extends A { protected function a1() { return 'a1方法被调用'; } public function a2($aa) { echo &quot;调用a1方法,参数:{$aa},结果:{$this-&gt;a1()}&quot;; } } $obj = new B; $obj->print(); $obj->a2('666');

接口

接口是一种特殊的抽象类,而抽象类又是一种特殊的类,所以可以将接口看作是一种特殊的类。

PHP只支持单继承,如果想实现多继承,就需要使用接口,通过关键字interface来声明接口。

<?php interface I { const NAME = '张三'; function fun(); } class A implements I { public function fun() { echo self::NAME; } } $obj = new A(); $obj->fun(); //张三

Trait

PHP是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,出现了Trait,为PHP单继承而准备的一种代码复用机制。

Trait和Class相似,但无法通过trait自身来实例化,在类中使用use关键字,声明要组合的Trait名称。

<?php trait A { public function aa() { echo 'aa'; } } trait B { public function bb() { echo 'bb'; } } class C { use A, B; public function cc() { echo 'cc'; } } $c = new C; $c->aa(); //aa $c->bb(); //bb $c->cc(); //cc

解决冲突

<?php trait T1 { public function fun() { echo METHOD; } } trait T2 { public function fun() { echo METHOD; } } class A { use T1, T2 { T1::fun insteadof T2; T2::fun as fun2; } } $obj = new A(); $obj->fun(); //T1::fun $obj->fun2(); //T2::fun

T1::fun insteadof T2;表示使用T1::fun方法替代T2::fun方法。

T2::fun as fun2;将T2::fun别名为T2::fun2。

魔术方法

构造&析构方法

构造方法__construct():在创建对象时自动执行,没有返回值,用于执行类的一些初始化工作,如可以在构造方法中传递参数,进行对象属性的初始化。

析构方法__destruct():当所有对象的引用被销毁时执行。

__set()和__get()

这两个方法不是默认存在的,而是手工添加到类里面去的,像构造方法(__construct())一样,类里面添加了才会存在。

__get():这个方法用来获取私有成员属性值,当尝试读取一个不存在或不可访问的属性值时,PHP会自动调用__get()方法。

__set():这个方法用来为私有成员属性设置值,当给一个不存在或不可访问的属性赋值时,PHP会自动调用__set方法。

__isset()和__unset()

当使用isset()或者empty()函数判断属性是否存在或者是否为空的时候会自动触发。

当使用unset()函数判断属性时,如果存在__unset()方法将会执行。

__call()和__callStatic()

__call()用来监视一个对象中的其它方法。如果试着调用一个对象中不存在或被权限控制的方法,__call 方法将会被自动调用。

当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。

本文作者:a

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!