簡體   English   中英

這在PHP()->中是什么意思

[英]what does this mean in PHP ()->

我已經在Yii框架上看到了這種語法的用法。 我嘗試尋找解釋,但沒有示例。 如果可能的話,鏈接會很好。 它類似於class::model()->function();

我的理解是模型是類的對象,因此它可以訪問該函數。 因此,我嘗試對其進行編碼,但得到“在非對象中調用成員函數sound() ”。 這是我的代碼

class animal
{
    private static $obj;

    public static function obj($className = __CLASS__)
    {        
        return self::$obj;
    }

    public static function walk()
    { 
        return "walking"; 
    } 
}


include('animal.php');

class cat extends animal
{
    public static function obj($className = __CLASS__)
    {
        return parent::obj($className);
    }

    public static function sound()
    {
        return "meow";
    }
}

echo cat::obj()->sound();

還有什么好處呢?

這稱為對象運算符 ,而->則從您在該類中定義的創建對象中調用類方法。

是一個解釋和一些示例。

$obj = new Class; // Object of the class
$obj->classMethod(); // Calling a method from that class with the object
echo cat::obj()->sound();

這將顯示sound()方法的輸出,該方法在cat::obj()返回的對象上調用。

失敗的原因是因為cat::obj()沒有返回有效的對象。

這樣做的原因是因為obj()方法返回靜態obj屬性,但實際上您並未在任何地方設置該obj屬性。

您在此處嘗試使用的模式稱為“ Singleton”對象。 在這種模式下,您調用obj()方法來獲取該類的單個實例。 每次調用該方法都會給您相同的對象。

但是,第一次調用該方法需要實例化該對象。 這就是你所缺少的。

public static function obj($className = __CLASS__){
    if(!static::$obj) {static::$obj = new static;}
    return static::$obj;
}

如果對象不存在,請參見在其中創建對象的新行。

另請注意,我已將self更改為static 在類繼承中使用此方法的方式意味着,您可能希望每種類類型都有一個不同的靜態對象, self將始終返回根animal::$obj屬性,而static將為每個類返回$obj屬性。你是從那里打來的。

您還需要注意其他一些錯誤。 例如,您已經將sound()方法定義為static ,但是使用->調用了它,因此它不應該是靜態的。

希望能有所幫助。

cat::obj()返回一個cat類型的對象。 使用->sound(); 您正在執行cat類的sound()函數。 所有這些都應該返回“喵”。

cat::obj()返回一個對象; ->sound(); 執行此對象的方法。 等效為

$o = cat::obj();
$o->sound();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM