簡體   English   中英

php,使用$ this->時出現類錯誤

[英]php, error in class when I use $this->

當我使用$this->時,我的代碼中出現此錯誤

致命錯誤:無法在第21行的/home/u506382626/public_html/s1/arrays.php中訪問空屬性

我雖然是這樣訪問當前對象變量的,不是嗎?

這是我的代碼。 我試圖使每個索引具有更大的值的數組,但我使用函數而不是索引。 是否可以在php中重載operator [],您該怎么做?

希望有人知道出了什么問題。

<?php

class zArray {
    public $change = 1.165;

    public $lenght;
    private $vars = array();
    public $name;
    public $percent = false;

    public function __construct($values) {
        for ($i=0; $i < 5; $i++) { 
            $vars[$i] = $values[$i];
        }
        $lenght = $values[5];
        $name = $values[6];
        $percent = $values[7];
    }

    public function at($i) {
        $newchange = $this->$change;
        for ( $i-- ; $i; $i-- )
            $newChange *= $this->$change;

        $newVars = $this->$vars;
        for ($i = 0; $i < 4; $i++) { 
            $newVars[$i] *= $newChange;
        }
        if ($percent) $newVars[4] /= $newChange;
        else $newVars[4] *= $newChange;

        return $newVars;
    }
};

$buildings = array(
    new zArray(85, 70, 65, 2, 100, 'Castle', true)
);

$try = $buildings[0]->at(3);



?>

您不能像這樣訪問變量

$this->$change; //wrong

試試這個

$this->change;

您的問題是這樣的: $this->$change 第二個$符號(即$change上的一個)是錯誤的。 要訪問對象屬性,只需指定$this->change

我可以看到錯誤消息是如何令人困惑的。

您收到特定錯誤消息的原因是$this->$change 有效的語法。 這意味着取局部變量$change的值,並找到名稱為該值的對象的屬性。

因此,如果您有$change = "name"; ,那么您會發現$this->$change將起作用,並且它將獲得name屬性的值。 即相當於$this->name

這類似於對變量使用$$語法。

這導致我們解釋錯誤消息試圖告訴您的內容:由於實際上您沒有局部的$change變量,PHP認為它是空白的。 因此,當您執行$this->$change ,並且$change部分給出一個空字符串時,PHP正確地抱怨您正在嘗試訪問一個空屬性。

希望能幫助解釋事情。 該錯誤消息可能會造成混淆,但是了解它試圖告訴您的內容確實可以使發現問題的過程變得更加容易。

暫無
暫無

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

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