PHP new static 和 new self区别
|
最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题: PHP 的 new static 和 new self 具体有什么? 视频地址https://www.laravist.com/seri... 其实这个来看一个例子应该就很清晰了: class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} // http://www.manongjc.com/article/1632.html 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: (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
