我一直担心通过字符串引用它们来调用方法。
基本上在我当前的场景中,我使用静态数据映射器方法来创建并返回一组数据模型对象(例如 SomeDataMapper::getAll(1234))。模型遵循 Active Record 设计模式。在某些情况下,可能会返回数百条记录,我不想一次将所有内容都放入内存。所以,我使用一个迭代器来翻阅记录,如下
$Iterator = new DataMapperIterator('SomeDataMapper', 'getAll', array(1234));
while ($Iterator->hasNext()) {
$data = $Iterator->next();
}
这是这样做的好方法吗?将映射器类的名称和方法作为字符串传递是一个坏主意吗?我担心这个想法不能移植到其他语言。对于像 Ruby 和 Python 这样的语言来说,这通常是正确的吗?如果是这样,任何人都可以推荐一个好的替代品吗?
仅供参考,为了将来的人们参考,我将这种方法称为:
$method = new ReflectionMethod($className, $methodName);
$returnValue = $method->invokeArgs(null, $parameters);