这被认为是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评论中的感叹号。