gpt4 book ai didi

php - empty() 和魔术方法 __get()

转载 作者:行者123 更新时间:2023-12-02 07:28:04 24 4
gpt4 key购买 nike

我遇到的情况并不复杂,但我花了一些时间才弄明白。

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 出于某种原因检查类结构而不是运行括号内的代码。为什么它没有按预期评估此代码?

这是一个错误还是为什么它不能正常工作?

最佳答案

首先,在 PHP 中你需要使用 $this-> 来访问像你的 $data 这样的类变量(所以 $this->data 而不是 $data)。使用另一种语言一段时间后很容易忘记,但如果您没有将错误报告设置为 E_ALL 来开发代码,则应将其设置为该值。在开发期间将其设置为 E_ALL 可以让您更轻松地找到(潜在的)错误,例如这个错误,并将提高您的代码质量。

要解决您的实际问题,为了确定是否为魔术变量设置了变量,您需要添加 __isset 魔术方法(manual):

<?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

关于php - empty() 和魔术方法 __get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25574791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com