我的问题围绕着魔术方法。
这是一个小例子:
$context = new Context('Entities.xml');
$user_array = $context->Users;
$user = $context->Users->find(array('name' => 'John Smith'));
第二行返回一个包含所有用户对象的数组。第三行仅返回名为John Smith的用户的User对象。
我想知道这是否可行,棘手的部分是我不知道Context class
的属性。它们是从用户在实例化时提供的xml文件生成的,并且可以通过魔法getter和setter访问。
Context
示例(不完整,只是为了提出一个想法):
class Context {
private $path, $entities;
public function __construct($path) {
$this->path = $path;
}
public function __get($name) {
return $entities[$name];
}
public function __set($name, $arg) {
$entities[$name] = $arg;
}
}
答案 0 :(得分:0)
因为我真的需要一个解决方案,所以我实现了以下解决方案。
Context
类的getter返回一个处理结果的ResultLayer
类。
示例:
class ResultLayer implements IteratorAggregate {
public $data = array();
private $entity, $context;
public function __construct($context, $entity) {
$this->context = $context;
$this->entity = $entity;
}
public function getIterator() {
return new ArrayIterator($this->data);
}
public function get($index) {
return $this->data[$index];
}
public function toArray() {
return $this->data;
}
public function find($properties) {
return $this->context->getEntity($this->entity, $properties);
}
}
我已经实现了IteratorAggregate
接口,以便您可以使用foreach
循环来执行$Context->Users
这样可以使代码更具可读性。
如果有人有更好的方法,我仍然愿意接受它。非常感谢任何帮助!