我正在用 PHP 设置一个应用程序,试图遵循 Laravel 中规定的一些约定,我可以看到有很多对 $this->app["some_var"];但是在我的应用程序中,它会抛出一个错误,指出“无法将对象用作数组”。我知道 Laravel 使用了诸如__get()和 之类的魔法方法__set() ,但我仍然得到相同的结果。我在 App 对象的父类中使用的魔法 getter 和 setter 代码 /** * Dynamically access container services. * * @param string $key * @return mixed */ public function __get($key) { return $this[$key]; } /** * Dynamically set container services. * * @param string $key * @param mixed $value * @return void */ public function __set($key, $value) { $this[$key] = $value; }预期结果是它访问对象上不可访问的任何属性?目前抛出一个 Fatal error: Uncaught Error: Cannot use object Application as type of array.
3 回答
RISEBY
TA贡献1856条经验 获得超5个赞
数组和对象是 PHP 中两种不同的数据类型。为了访问数组变量,我们需要使用方括号[ ]。例如,
$a = array('one','two','three');
$a[] = "four";
echo $a[3]; //Output: four.
但是,为了访问对象变量
$a = new {className}();
$a->key = 'value'; //Using magic method __get()
echo $a->key; //Output: value
就类而言,$this指的是特定类的对象。因此,您不能使用[]方括号分配变量。为此,您需要使用->箭头。
在类内部,您需要按如下方式重写您的函数
public function __get($key) {
return $this->$key ?: false;
}
public function __set($key,$value) {
$this->$key = $value;
}
否则,您可以在类中创建一个新的数组变量,如下所示
class className {
public $a = array();
public function __get($key) {
return $this->a[$key] ?: false;
}
public function __set($key,$value) {
return $this->a[$key] = $value;
}
}
- 3 回答
- 0 关注
- 185 浏览
添加回答
举报
0/150
提交
取消