有点。有一些魔术方法允许你挂钩你自己的代码,在运行时实现类的行为:
class foo {
public function __get($name) {
return('dynamic!');
}
public function __set($name, $value) {
$this->internalData[$name] = $value;
}
}
这是一个动态getter和setter方法的例子,它允许你在访问对象属性时执行行为。例如
print(new foo()->someProperty);
将打印,在这种情况下,“动态!并且您还可以为任意命名的属性分配值,在这种情况下,将静默调用__set()方法。 __call($ name,$ params)方法对于对象方法调用也是一样。在特殊情况下非常有用。但大多数时候,你会得到:
class foo {
public function __construct() {
foreach(getSomeDataArray() as $k => $value)
$this->{$k} = $value;
}
}
…因为大多数情况下,你需要的是将数组的内容转储到相应命名的类字段一次,或者至少在执行路径的非常明确的点。所以,除非你真的需要动态行为,使用最后一个例子用数据填充你的对象。
This is called overloading 07000