亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP 類中子級之間的靜態屬性共享/定義

PHP 類中子級之間的靜態屬性共享/定義

PHP
牧羊人nacy 2023-05-12 15:13:20
我對標題描述的內容存在誤解,我想知道是否有另一種方法可以實現我在那里尋找的東西。我有一個抽象類,它聲明了一個沒有值的靜態屬性,我從它實例化了定義該靜態屬性值的子類。基類還根據第一個靜態屬性值定義了另一個靜態屬性值,但問題是子類正在為其他子類中定義的最后一個屬性值丟失第一個屬性值,然后第二個屬性從父類中獲取錯誤值。這段代碼比我解釋的更好地展示了它:abstract class A{    protected static $name;     protected static $path;    public function __construct()    {        static::$path = static::$name."Path";    }    public function getPath()    {        return static::$path;       }}class B extends A{    protected static $name = "B";   }class C extends A{    protected static $name = "C";   }$b = new B();$c = new C();echo $b->getPath();我希望 echo 打印“Bpath”,但不幸的是它打印“CPath”。如果我評論實例化 C 類的行,那么打印效果很好。編輯: 問題是如果我執行此代碼:abstract class A{       protected static $name;    protected static $path;    public function __construct()    {        static::$path = static::$name."Path";    }    public function getPath()    {        return static::$path;       }    public function getName()    {        return static::$name;       }}class B extends A{    protected static $name = "B";   }class C extends A{    protected static $name = "C";   }$b = new B();$c = new C();echo $b->getName();印刷的名字是“B”,很好。因此,即使使用 static:: 關鍵字,在子類屬性中重新定義值的事實也不會產生與在構造函數中這樣做相同的結果。
查看完整描述

1 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

靜態屬性$path只在類上定義一次A。從任何地方設置static::$path都將始終設置A::$path,因此該值在所有類之間共享。


protected static $path;如果你在兩個子類上聲明,你會看到不同的結果,例如:


class B extends A {

    protected static $name = "B";   

    protected static $path;

}

現在每個類都有自己的靜態$path屬性,并且可以獨立設置。


盡管使用實例屬性而不是使用靜態屬性向后彎曲會更有意義:


abstract class A {

    protected static $name;

    protected $path;


    public function __construct() {

        $this->path = static::$name . 'Path';

    }


    public function getPath() {

        return $this->path;   

    }

}


查看完整回答
反對 回復 2023-05-12
  • 1 回答
  • 0 關注
  • 159 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號