我正在编写一个轻量级 ORM,它可以将数据库列映射到具有不同名称的实例字段
例如。
数据库
- 用户身份
- 用户名
- 另一个名不见经传的田野
目的
- 用户身份
- 用户名
- another_poorly_named_field
为此,我的原始设计是这样的
abstract class DbObj {
/* In a subclass the author would provide the mapping of fileds
* from the database to the object
* e.g.
* array('userid' => 'user_id', 'username' => 'username'....
*/
protected static $db_to_obj = array();
/* This would be auto popuplated from $db_to_obj in reverse */
protected static $obj_to_db = array();
/* Many Methods truncated... */
/* Used by magic methods to make sure a field is legit */
public function isValidField($name) {
return in_array(strtolower($name), self::$db_to_obj);
}
}
然后我将其子类化
class Cat extends DbObj {
protected static $db_to_obj = array(
'catsname' => 'name',
'itsage' => 'age'
);
}
该isValidField
方法没有按预期工作。使用调试器或老式的var_dump
,您会发现 的值self::$db_to_obj
是父类的值。如果isValidField
是,我会理解static
,但事实并非如此。它确实有一个$this
指针,并且它确实知道它的类。
是否有解决此行为的方法或使用更好的架构?