Dan*_*old 8 php laravel laravel-5 php-7 laravel-5.4
好吧,我真的很困惑.当我检查属性是否存在时,它返回false.
if (property_exists($pais, 'id'))
// false
Run Code Online (Sandbox Code Playgroud)
但是当我调试它时,它就会显示出来.
print_r($pais->id);
// 1
print_r(property_exists($pais, 'id'));
// false
Run Code Online (Sandbox Code Playgroud)
我疯了还是我的神经元只是炒?
并且pais的创建是由
if (key_exists('country', $data))
$pais = Pais::adicionarPais($data);
(...)
public static function adicionarPais(array $data)
{
return Pais::firstOrCreate(['nome' => $data['country']]);
}
Run Code Online (Sandbox Code Playgroud)
我看到你正在使用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)
Run Code Online (Sandbox Code Playgroud)
您可以将模型转换为数组,然后使用array_key_exists. Eloquent 对象属性是通过魔术方法设置的,因此property_exists将不起作用,特别是如果该属性确实存在但设置为null.
例子:
$pais = Pais::find(1);
if (array_key_exists('country', $pais->toArray())) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
注意toArray模型上的使用。
| 归档时间: |
|
| 查看次数: |
1966 次 |
| 最近记录: |