判断动态属性是否为空

问题描述 投票:0回答:3

我觉得我在这里错过了一些东西。我已经使用 PHP 的

empty()
函数一段时间来确定变量是否为空。我想用它来确定对象的属性是否为空,但不知何故它不起作用。这是一个简化的类来说明问题

// The Class 
class Person{
    private $number;

    public function __construct($num){
        $this->number = $num;
    }

    // this the returns value, even though its a private member
    public function __get($property){
        return intval($this->$property);
    }
}

// The Code    
$person = new Person(5);

if (empty($person->number)){
    echo "its empty";
} else {
    echo "its not empty";
}

所以基本上,

$person
对象的 number 属性应该有一个值(5)。正如您可能已经猜到的,问题是 php 回显“itsempty”。但事实并非如此!!!

但是,如果我将属性存储在变量中,然后对其进行评估,它确实有效。

那么确定对象属性是否为空的最佳方法是什么?谢谢你。

php
3个回答
27
投票

你需要实现 __isset() 魔术方法。

__isset() 通过对不可访问的属性调用 isset() 或 empty() 来触发。

public function __isset($property){
    return isset($this->$property);
} 

4
投票
if (empty(($person->number)))

/* OR */

if (!isset($person->nothing) || empty(($person->nothing)))

将 () 放在对象->属性值周围将强制在调用空之前对其进行评估。


1
投票

检查返回值是否为

null
。应该给你正确的答案。

© www.soinside.com 2019 - 2024. All rights reserved.