PHP中自我关键字的作用有哪些

  

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中自我关键字的作用有哪些