class Address {
private $number;
private $street;
public function __construct($maybenumber, $maybestreet = null) {
if(is_null($maybestreet)) {
$this->streetaddress = $maybenumber;
} else {
$this->number = $maybenumber;
$this->street = $maybestreet;
}
}
public function __set($property, $value) {
if($property === "streetaddress") {
if(preg_match("/^(\d+.*?)[\s,]+(.+)$/", $value, $matches)) {
$this->number = $matches[1];
$this->street = $matches[2];
} else {
throw new Exception("unable to parse street address: '{$value}'");
}
}
}
public function __get($property) {
if($property === "streetaddress") {
return $this->number . " " . $this->street;
}
}
}
$address = new Address("441b Bakers Street");
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";
输出:
...
[address] => Address Object
(
[number:Address:private] => 441b
[street:Address:private] => Bakers Street
)
它是如何的__set
方法被调用和属性$number
和$street
集合如图所示,当__set方法甚至没有从哪里调用?
我正常的逻辑告诉我,当实例发生的一切,将已经发生的情况是,一个房地产streetaddress
会以来的第二个参数传递给$maybenumber
参数的值来创建,$maybestreet
为空。
对此行为的任何解释都会有所帮助,并且官方文档的链接也会很好。
附加debug_print_backtrace();以__set并查看结果)...地址 - > __设置(streetaddress,441b贝克街)在[... – Cheery 2014-09-25 01:15:45