摘要:则上面的基础上,更聪明一点点会返回执行的类,比如执行返回的是执行返回的是而在没有继承的情况下,可以认为和是返回相同的结果。
最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题:
PHP 的 new static 和 new self 具体有什么?
视频地址 https://www.codecasts.com/ser...
其实这个来看一个例子应该就很清晰了:
class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
这里面注意这一行 get_class(Son::getStatic()); 返回的是 Son 这个 class,可以总结如下:
new self1.self 返回的是 new self 中关键字 new 所在的类中,比如这里例子的 :
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
始终返回 Father。
new static2.static 则上面的基础上,更聪明一点点:static 会返回执行 new static() 的类,比如 Son 执行 get_class(Son::getStatic()) 返回的是 Son, Father 执行 get_class(Father::getStatic()) 返回的是 Father
而在没有继承的情况下,可以认为 new self 和 new static是返回相同的结果。
Tips: 可以用一个好的 IDE 来直接看注释。比如 PhpStorm:
Happy Hacking
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22389.html
摘要:首先阐明结论,在中指向定义了当前被调用方法的类,指向调用当前静态方法的类。下面的例子更好的说明了和之间的差异后者使用了的后期静态绑定指向调用方法的当前类 首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。 接下来通过一个例子来证明上面的结果 class A { public static $_a = Class A; ...
摘要:有了的静态延迟绑定功能,可以在运行时动态确定归属的类。与是被讨论最多,也是最容易引起误用的组合。的用途看完与上述三个关键字的区别,的用途是不是呼之即出一句话总结,那就是总是指向当前类及类实例。 转载请注明文章出处:https://tlanyan.me/self-in-php/ PHP群里有人询问self关键字的用法,答案是比较明显的:静态成员函数内不能用this调用非成员函数,但可以用...
摘要:的设计模式有很多种,本文取最简单的三种模式工厂模式单例模式和注册树模式进行简单的讲解。文件创建完后,咱们回到单元测试文件文件再执行一下单元测试命令发现,也能返回成功,这样的话我们就能很方便的修改任何驱动了。 php 设计模式之工厂模式、单例模式、注册树模式 在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具...
摘要:静态方法和属性静态方法是以类作为作用域的函数。静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。因此静态方法和属性又被称为类变量和属性,也就不能在静态方法中使用伪变量。引入了延迟静态绑定的概念。 静态方法和属性 静态方法是以类作为作用域的函数。静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。如果修改了一个静态属性,那么这...
阅读 896·2021-11-25 09:43
阅读 1242·2021-11-17 09:33
阅读 2978·2019-08-30 15:44
阅读 3277·2019-08-29 17:16
阅读 451·2019-08-28 18:20
阅读 1544·2019-08-26 13:54
阅读 531·2019-08-26 12:14
阅读 2149·2019-08-26 12:14