new self 與 new static 的區別
阿新 • • 發佈:2019-02-03
說明
大概的意思都是例項化當前類
但如果 是繼承關係就會有細微的差別
例子
class root { public function static getSelf() { return new self; } public function static getStatic () { return nre static; } } class child extends root {} var_dump(get_class(child::getSelf())); // root var_dump(get_class(child::getStatic())); // child var_dump(get_class(root::getSelf())); // root var_dump(get_class(root::getStatic())); // root
解釋
從上面的例子可以看出 只有第二個顯示了與其他不同的內容
也就是說 在繼承的關係 下 static
self
代表了不同的內容
self
表示的是程式碼所在類
static
表示的是外部呼叫的類
例子
class root { public static function getSelf() { return new self; // 無論是當前類還是子類呼叫當前方法 這裡的 self 都表示 root } } class root { public static function getStatic () { return new static; // 如果是子類的呼叫這裡的static 表示的就是最上層的子類 // 如果是直接呼叫的當前類 static 就表示 root } } class foo extends root {} class bar extends foo {} var_dump(get_class(bar::getStatic())); // 這裡輸出 bar