Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这被认为是php offsetget方法中的错误吗_Php - Fatal编程技术网

这被认为是php offsetget方法中的错误吗

这被认为是php offsetget方法中的错误吗,php,Php,扩展的对象的示例实现ArrayAccess的对象的示例 如果我试图以对象方式访问变量,则会调用\u get和offsetget,但是 如果我像这样访问它,则只调用offsetget 我似乎没有问题(如果有问题,我从_getreturned获得值) ,但offsetget方法可能会把事情搞砸 有没有这方面的经验 class Container implements ArrayAccess { public function offsetGet($key) { $thi

扩展的对象的示例
实现ArrayAccess的对象的示例

如果我试图以对象方式访问变量,则会调用
\u get
offsetget
,但是 如果我像这样访问它,则只调用
offsetget

我似乎没有问题(如果有问题,我从_getreturned获得值) ,但offsetget方法可能会把事情搞砸

有没有这方面的经验

class Container implements ArrayAccess {

    public function offsetGet($key)
    {
      $this->t .= "call magic offsetGet with $key<br>";
      return $this->make($key);
    }
}
class Application extends Container{
   protected $t="";
    public function __get($key)
    {        
        $this->t .= "call magic _get with $key<br>";
        return $this[$key];
    }
}


$e = $app->t;
// $e = $app['b'];
// echo $app->t;
var_dump($e);
类容器实现ArrayAccess{
公共函数offsetGet($key)
{
$this->t.=“使用$key调用magic offsetGet
”; 返回$this->make($key); } } 类应用程序扩展容器{ 受保护$t=“”; 公共功能获取($key) { $this->t.=“用$key调用magic\u get
”; 返回$this[$key]; } } $e=$app->t; //$e=$app['b']; //echo$app->t; var_dump($e);
如手册所述:

__get() is utilized for reading data from inaccessible properties. 
发出以下命令将创建名为“b”的公共属性:

$app->b ="hh";

从现在开始,如果您访问$app->b,{uu get()方法不再被调用,正如
deceze
指出的那样,这不是PHP同时调用两个神奇方法,它们都在您的代码中显式调用:

  • 您访问一个不存在的属性,例如
    $app->foo
  • 这将使用
    $key='foo'
  • 这包括行
    $this[$key]
    ,它将解析为
    $this['foo']
  • $this
    是一个作为数组访问的对象,因此使用
    $key='foo'
  • 如果您直接访问
    $app['foo']
    ,则不会调用
    应用程序::\u get
    ,因为您直接跳到了步骤4


    类似地,如果在
    应用程序::\u get
    中注释掉
    return$this[$key]
    行,将不会调用
    容器::offsetGet
    ,因为这是调用
    数组访问
    魔术的行。

    为什么不提供脚本呢!我的laravel应用程序类扩展了ContainerOrry man,我不知道
    laravel
    请提供一个最小的、自包含的代码示例来演示这个问题。如果您断言您可能发现了一个bug,请始终提供代码,不要只谈论代码。是否因为您在
    \u get
    内调用
    $this[$key]
    而可能触发这两个bug。。。?!我改变了我的测试样本非常感谢,令人难以置信的是你能直接阅读它,也错过了@deceze评论中的感叹号。