为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 如何像数组一样使用 app 对象?

Laravel 如何像数组一样使用 app 对象?

PHP
弑天下 2021-06-30 10:55:55
我正在用 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;

 }

}


查看完整回答
反对 回复 2021-07-02
  • 3 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信