php - 属性存在但 property_exists() 返回 false;

标签 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

我是疯了还是我的神经元炸了?

而 pais 的创建是由

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

(...) 

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

最佳答案

我看到你在使用 Laravel,所以我猜这是 Eloquent 模型。他们可能正在使用魔术方法从您的数据库列创建动态属性和方法。看这里: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)

关于php - 属性存在但 property_exists() 返回 false;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011189/

相关文章:

php - Laravel 5 使用销毁方法删除现有文章

javascript - 单击弹出窗口中的注册或登录按钮后如何使弹出窗口保留

php - 查询在 sql 中有效,在 php 中无效

php - Bootstrap 模式 + PHP + AJAX

php - Laravel 仅从相关模型中选择不同的值(多对多关系)

php - Laravel在表单提交之前显示错误消息

php - 我如何指示 artisan 将模型保存到特定目录?

laravel - 如何使用Laravel 5在Elasticsearch中分页

php - Laravel 路由问题与 web.php 中的路由顺序

php - 如何将javascript变量传递给smarty中的url