当我使用$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);
?>
答案 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非常正确地抱怨你正在尝试访问一个空的属性。
希望有助于解释事情。错误信息可能令人困惑,但了解它试图告诉您的内容确实可以更容易地发现正在发生的事情。