PHPには純粋なオブジェクト変数がないことを理解していますが、プロパティが指定されたオブジェクトまたはクラスにあるかどうかを確認したいと思います。
$ob = (object) array('a' => 1, 'b' => 12);
または
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
JS、では、変数a
がオブジェクトに存在するかどうかを確認するためにこれを書くことができます。
if ('a' in ob)
PHP、では、このようなことができますか?
アドバイスありがとうございます。
if (property_exists($ob, 'a'))
if (isset($ob->a))
isset()は、プロパティがnullの場合falseを返します
例1:
$ob->a = null
var_dump(isset($ob->a)); // false
例2:
class Foo
{
public $bar = null;
}
$foo = new Foo();
var_dump(property_exists($foo, 'bar')); // true
var_dump(isset($foo->bar)); // false
プロパティが存在するかどうか、またプロパティがnullかどうかを確認するには、関数property_exists()
を使用できます。
ドキュメント: http://php.net/manual/en/function.property-exists.php
Isset()とは対照的に、property_exists()は、プロパティの値がNULLであってもTRUEを返します。
bool property_exists(混合$ class、文字列$ property)
例:
if (property_exists($testObject, $property)) {
//do something
}
issetまたはproperty_existsのどちらでも機能しません。
私は次のようになりました:
$exists = array_key_exists($property, get_object_vars($obj));
例:
class Foo {
public $bar;
function __construct() {
$property = 'bar';
isset($this->$property); // FALSE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // TRUE
unset($this->$property);
isset($this->$property); // FALSE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // FALSE
$this->$property = 'baz';
isset($this->$property); // TRUE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // TRUE
}
}
定義したクラスのインスタンスにプロパティが存在するかどうかを知りたい場合は、property_exists()
とisset()
を組み合わせてください。
public function hasProperty($property)
{
return property_exists($this, $property) && isset($this->$property);
}
echo $person->middleName ?? 'Person does not have a middle name';
OR
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
説明
何かの存在を確認する従来のPHP方法は次のとおりです。
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
または、よりクラス固有の方法の場合:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
これらは両方とも長い形式のステートメントでは問題ありませんが、3項のステートメントでは不必要に面倒になりますisset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
echo $person->middleName ?: 'Person does not have a middle name';
のような三項演算子だけでこれを実現することもできますが、値が存在しない(設定されていない)場合、E_NOTICEが発生し、ベストプラクティスではありません。値がnull
の場合、例外は発生しません。
したがって、三者演算子は救助にこれをきちんとした小さな答えにします:
echo $person->middleName ?? 'Person does not have a middle name';
何かが終了するかどうかを確認するには、PHP関数isset() php.netを参照 を使用できます。この関数は、変数が設定されていてNULLでないかどうかを確認します。
例:
if(isset($obj->a))
{
//do something
}
クラスにプロパティが存在するかどうかを確認する必要がある場合は、ビルドイン関数 property_exists() を使用できます
例:
if (property_exists('class', $property)) {
//do something
}