php,我在使用$ this->时在课堂上出错

时间:2013-06-16 16:35:58

标签: php

当我使用$this->

时,我的代码中出现此错误
  

致命错误:无法访问第21行/home/u506382626/public_html/s1/arrays.php中的空属性

我虽然这是你访问当前对象变量的方式,不是吗?

这是我的代码。我正在尝试为每个索引创建一个具有更大值的数组但是使用函数at而不是索引。是否有可能在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);



?>

2 个答案:

答案 0 :(得分:7)

您无法像这样访问变量

$this->$change; //wrong

试试这个

$this->change;

答案 1 :(得分:1)

你的问题是:$this->$change。第二个$符号(即$change上的符号)是错误的。要访问object属性,只需指定$this->change

我可以看到错误信息是如何混淆的。

您收到的具体错误消息的原因是$this->$change 有效的语法。这意味着取局部变量$change的值,并找到名称为该值的对象的属性。

因此,如果您有$change = "name";,那么您会发现$this->$change会起作用,并且会获得name属性的值。即它等同于$this->name

这与使用变量变量的$$语法类似。

这导致我们解释错误消息试图告诉你的内容:因为实际上你没有本地$change变量,PHP认为它是空白的。因此当你执行$this->$change并且$change部分给出一个空字符串时,PHP非常正确地抱怨你正在尝试访问一个空的属性。

希望有助于解释事情。错误信息可能令人困惑,但了解它试图告诉您的内容确实可以更容易地发现正在发生的事情。