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

我正在用 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.


弑天下
浏览 186回答 3
3回答

RISEBY

数组和对象是 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; }}
打开App,查看更多内容
随时随地看视频慕课网APP