属性存在,但Property_Existes()返回FALSE;

2022-06-16 00:00:00 php laravel laravel-5 php-7 laravel-5.4

嗯,我真的很困惑。 当我检查属性是否存在时,它返回FALSE。

if (property_exists($pais, 'id'))
// false

但当我调试时,它会显示它在那里。

print_r($pais->id);
// 1
print_r(property_exists($pais, 'id'));
// false

是我疯了还是我的神经元被烧坏了?

,PAI的创建由

完成
if (key_exists('country', $data))
    $pais = Pais::adicionarPais($data);

(...) 

public static function adicionarPais(array $data)
{
    return Pais::firstOrCreate(['nome' => $data['country']]);
}

解决方案

我看到您使用的是Laravel,所以我猜这是很有说服力的模型。他们可能正在使用神奇的方法从您的数据库列创建动态属性和方法。请看这里:http://php.net/manual/en/language.oop5.overloading.php

因此,每次您请求属性时,它们将检查是否有任何列或关系,并返回该列或关系,而不是具有实际属性。

您可以使用getAttributes()方法(https://github.com/illuminate/database/blob/master/Eloquent/Concerns/HasAttributes.php#L851)

获取模型属性
class Pais
{
    public function __get($name) {
        if ($name == 'id') {
            return 1;
        }
    }
}
$pais = new Pais();
var_dump($pais->id); // int(1)
var_dump(property_exists($pais, 'id')); // bool(false)

相关文章