与 parent 、 static 和 this 的区分
要想将彻底搞懂 self ,要与 parent 、 static 和 this 区别开。如下辨别做比照。
parent
self 与 parent 的区别比拟容易: parent 援用父类/基类被隐盖的办法(或变量), self则援用本身办法(或变量)。例如结构函数中挪用父类结构函数:(收费学习视频教程分享:php视频教程)
class Base { public function __construct() { echo "Base contructor!", PHP_EOL; } } class Child { public function __construct() { parent::__construct(); echo "Child contructor!", PHP_EOL; } } new Child; // 输入: // Base contructor! // Child contructor!
static
static 惯例用处是润饰函数或变量使其成为类函数以及类变量,也能够润饰函数内变量延伸其生命周期至整个使用顺序的生命周期。然而其与 self 联系关系上是PHP 5.3以来引入的新用处:动态提早绑定。
有了 static 的动态提早绑定性能,能够正在运转时静态确定归属的类。例如:
class Base { public function __construct() { echo "Base constructor!", PHP_EOL; } public static function getSelf() { return new self(); } public static function getInstance() { return new static(); } public function selfFoo() { return self::foo(); } public function staticFoo() { return static::foo(); } public function thisFoo() { return $this->foo(); } public function foo() { echo "Base Foo!", PHP_EOL; } } class Child extends Base { public function __construct() { echo "Child constructor!", PHP_EOL; } public function foo() { echo "Child Foo!", PHP_EOL; } } $base = Child::getSelf(); $child = Child::getInstance(); $child->selfFoo(); $child->staticFoo(); $child->thisFoo();
输入后果以下:
正在函数援用上, self 与 static 的区分是:
关于动态成员函数, self 指向代码以后类, static 指向挪用类;关于非动态成员函数, self 克制多态,指向以后类的函数, static 同等于 this ,静态指向挪用类的函数。
parent 、 self 、 static 三个要害字联结正在一同看挺无意思,辨别指向父类、以后类、子类,有点“过来、如今、将来”的滋味。
this
self 与 this 是被探讨最多,也是最容易惹起误用的组合。
二者的次要区分以下:
一、this 不克不及用正在动态成员函数中, self 能够;
二、对动态成员函数/变量的拜访, 倡议 用 self ,没有要用 $this:: 或 $this-> 的方式;
三、对非动态成员变量的拜访,不克不及用 self ,只能用 this ;
四、this 要正在工具曾经实例化的状况下应用, self 不此限度;
五、正在非动态成员函数内应用, self 克制多态行为,援用以后类的函数;而 this 援用挪用类的重写(override)函数(假如有的话)。
self 的用处
看完与上述三个要害字的区分, self 的用处是否是呼之即出?一句话总结,那就是: self老是指向“以后类(及类实例)”。具体说则是:
一、代替类名,援用以后类的动态成员变量以及动态函数;
二、克制多态行为,援用以后类的函数而非子类中笼罩的完成;
相干文章教程保举:php教程
以上就是对于PHP中self要害字的用法详解的具体内容,更多请存眷资源魔其它相干文章!
标签: php 用法 php开发教程 php开发资料 php开发自学 self 关键字
抱歉,评论功能暂时关闭!