Php empty()和magic方法
我的处境并不复杂,但我花了一段时间才弄明白Php empty()和magic方法,php,Php,我的处境并不复杂,但我花了一段时间才弄明白 class A { private $data = array('key' => 'value'); public function __get($name){ return $this->data[$name]; } } $a = new A(); var_dump(empty($a->key)); // TRUE 我想这是因为empty出于某种原因检查类结构,而不是在括号内运行代码
class A {
private $data = array('key' => 'value');
public function __get($name){
return $this->data[$name];
}
}
$a = new A();
var_dump(empty($a->key)); // TRUE
我想这是因为empty
出于某种原因检查类结构,而不是在括号内运行代码。为什么它没有按预期评估此代码
这是一个bug还是它为什么不能正常工作?首先,在PHP中,您需要使用
$this->
来访问类变量,比如$data
(因此$this->data
而不是$data
)。使用另一种语言一段时间后很容易忘记,但如果您在开发代码时没有将错误报告设置为E_ALL
,则应将其设置为该值。在开发过程中将其设置为E_ALL
,可以让您更容易地发现(潜在)此类错误,并提高代码质量
为了解决实际问题,为了确定是否为magic变量设置了变量,您需要添加\u isset
magic方法():
您不应该使用返回$data[$name]
但是返回$this->data[$name]代码>,我猜?@KIKOSoftware是的,我只是为了这个问题写了这个,简单的错误。将修复它,感谢关于$this
的部分,很抱歉我只是为了这个问题写了这段代码,这是一个简单的错误,抱歉。谢谢在C#和PHP之间切换是我的一个常见错误如果你正在学习魔法方法,我建议你看一看;我真的很喜欢它的工作方式(虽然有点复杂)。但是,我想知道,如果这个方法这么简单,为什么它不能自动实现呢?我的意思是我只需要编写函数uu-isset($name){return-isset($this->data[$name])}
。我想知道为什么他们没有将其配置为默认运行:?@php\u nub\u qq,因为get与isset非常不同。你不能简单地把isset和get电话联系起来,因为这是一个危险的假设。isset应该是一个非常简单的调用,用于检查它是否存在。get可能是一个繁重/昂贵的调用,它实际获取所有数据,处理数据,然后返回数据。
<?php
class A {
private $data = array('key' => 'value');
public function __get($name){
return $this->data[$name];
}
public function __isset($name){
return array_key_exists($name, $this->data);
}
}
$a = new A();
var_dump(empty($a->key)); // it's FALSE now