1

当我使用时,我的代码中出现此错误$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);



?>
4

2 回答 2

7

您不能像这样访问变量

$this->$change; //wrong

试试这个

$this->change;
于 2013-06-16T16:38:53.737 回答
1

你的问题是这样的:$this->$change。第二个$标志(即 上的那个$change)是错误的。要访问对象属性,您只需指定$this->change.

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

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

因此,如果您有$change = "name";,那么您会发现它$this->$change会起作用,并且它会获得name财产的价值。即它相当于$this->name.

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

这使我们解释了错误消息试图告诉您的内容:由于实际上您没有局部$change变量,因此 PHP 将其视为空白。因此,当您这样做时$this->$change,该$change部分给出了一个空字符串,PHP 非常正确地抱怨您正在尝试访问一个空属性。

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

于 2013-06-16T18:55:18.333 回答