Я не могу понять, почему, если я выполню этот код, он напечатает true
$a = $myobject[0]->myproperty;
echo isset($a) ? "true" : "false";
Но с этим результатом будет false:
echo isset($myobject[0]->myproperty) ? "true" : "false";
Свойство объекта неинтерпретировать PHP как переменную?Во второй ситуации я просто заменил переменную $ a, вставив вместо нее инструкцию.
$m = MyObject::ByAttributes("My text on attribute property");
$myobject = [$m];
Определение класса:
<?php
class MyObject implements JsonSerializable {
private $myproperty;
public static function ByAttributes($myproperty) {
$instance = new self();
$instance->myproperty = $myproperty;
return $instance;
}
public static function ByQuery(object $result) {
$instance = new self();
$instance->myproperty = isset($result->myproperty) ? $result->myproperty : null;
return $instance;
}
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
public function jsonSerialize() {
return get_object_vars($this);
}
public function __toString() {
return get_class($this) . "{" . implode(",", get_object_vars($this)) . "}";
}
}
?>