new self()和new static()的区别

谭佳成
2018-12-20
(34)

<?php

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()).'<br>'; // Father
echo get_class(Son::getStatic()).'<br>'; // Son
echo get_class(Father::getSelf()).'<br>'; // Father
echo get_class(Father::getStatic()).'<br>'; // Father
exit;

new self

1.self返回的是 new self 中关键字 new 所在的类中,比如这里例子的 :

public static function getSelf() {
  return new self(); // new 关键字在 Father 这里
}

始终返回 Father。

new static

2.static 则上面的基础上,更聪明一点点:static 会返回执行 new static() 的类,比如 Son 执行 get_class(Son::getStatic()) 返回的是 Son, Father 执行 get_class(Father::getStatic()) 返回的是 Father

而在没有继承的情况下,可以认为 new self 和 new static是返回相同的结果。


如无说明,本站文章均为原创,转载或引用注明来源:https://93jc.cn/article/176.html