PHP中自我关键字的作用有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
PHP群里有人询问自我关键字的用法,答案是比较明显的:静态成员函数内不能用这个调用非成员函数,但可以用自我调用静态成员函数/变量/常量;其他成员函数可以用自我调用静态成员函数以及非静态成员函数。随着讨论的深入,发现自己并没有那么简单。
<强>与家长,静态以及这的区别强>
要想将彻底搞懂自己,要与家长,静态以这个区及分开。以下分别做对比。
<强>父
强>
自我与母公司的区分比较容易:父母引用父类/基类被隐盖的方法(或变量),自我则引用自身方法(或变量)。例如构造函数中调用父类构造函数:
class Base { ,public function  __construct (), { echo 才能“Base  contructor !“,, PHP_EOL; ,} } class Child  { ,public function  __construct (), { 父:才能__construct (); echo 才能“Child  contructor !“,, PHP_EOL; ,} } new 儿童;//,输出://,Base contructor !//,Child contructor !
<强>静态强>
静态常规用途是修饰函数或变量使其成为类函数和类变量,也可以修饰函数内变量延长其生命周期至整个应用程序的生命周期。但是其与自我关联上是PHP 5.3以来引入的新用途:静态延迟绑定。
有了静态的静态延迟绑定功能,可以在运行时动态确定归属的类,例如:
class Base { ,public function  __construct (), { echo 才能“Base 构造函数!“,,PHP_EOL; ,} ,public static function  getSelf (), { return 才能;new 自我(); ,} ,public static function  getInstance (), { return 才能;new 静态(); ,} ,public function  selfFoo (), { return 才能自我:foo (); ,} ,public function  staticFoo (), { return 才能;静态:foo (); ,} ,public function  thisFoo (), { return 才能;这→美元foo (); ,} ,public function  foo (), { echo 才能“Base  Foo !“,, PHP_EOL; ,} } class Child  extends Base  { ,public function  __construct (), { echo 才能“Child 构造函数!“,,PHP_EOL; ,} ,public function  foo (), { echo 才能“Child  Foo !“,, PHP_EOL; ,} } $ base =,孩子:getSelf (); $ child =,孩子:getInstance (); 孩子→美元selfFoo (); 孩子→美元staticFoo (); 孩子→美元thisFoo ();
程序输出结果如下:
基础构造函数!
引用>
孩子构造函数!
基地Foo !
孩子Foo !
孩子Foo !
在函数引用上,自我与静态的区别是:对于静态成员函数,自我指向代码当前类,静态指向调用类;对于非静态成员函数,自抑制多态,指向当前类的成员函数,静等同于此,动态指向调用类的函数。
家长,自我,静态三个关键字联合在一起看挺有意思,分别指向父类,当前类,子类,有点”过去,现在,未来”的味道。
<强>这强>
自我与这是被讨论最多,也是最容易引起误用的组合。两者的主要区别如下:
<李>
这个不能用在静态成员函数中,自可以;
李> <李>对静态成员函数/变量的访问,建议用自我,不要用美元::或这→美元的形式;
李> <李>对非静态成员变量的访问,不能用自我,只能用;
李> <李>这要在对象已经实例化的情况下使用,自己没有此限制;
李> <李>在非静态成员函数内使用,自抑制多态行为,引用当前类的函数;而这引用调用类的重写(覆盖)函数(如果有的话)。
李><强>自我的用途强>
看完与上述三个关键字的区别,自我的用途是不是呼之即出?一句话总结,那就是:自我总是指向“当前类(及类实例)”。详细说则是:
<李>
替代类名,引用当前类的静态成员变量和静态函数;
李> <李>抑制多态行为,引用当前类的函数而非子类中覆盖的实现;
李><强>槽点强>
PHP中自我关键字的作用有哪些