【发布时间】:2013-09-25 05:14:49
【问题描述】:
我有这样的事情:
class MyParent {
protected static $object;
protected static $db_fields;
public function delete() {
// delete stuff
}
public static function find_by_id($id = 0) {
global $database;
$result_array = self::find_by_sql("SELECT * FROM " . static::$table_name . " WHERE id=" . $database -> escape_value($id) . " LIMIT 1");
return !empty($result_array) ? array_shift($result_array) : false;
}
public static function find_by_sql($sql = "") {
global $database;
// Do Query
$result_set = $database -> query($sql);
// Get Results
$object_array = array();
while ($row = $database -> fetch_array($result_set)) {
$object_array[] = self::instantiate($row);
}
return $object_array;
}
private static function instantiate($record) {
$object = self::$object;
foreach ($record as $attribute => $value) {
if (self::has_attribute($attribute)) {
$object -> $attribute = $value;
}
}
return $object;
}
}
class TheChild extends MyParent {
protected static $db_fields = array('id', 'name');
protected static $table_name = "my_table";
function __construct() {
self::$object = new TheChild;
}
}
$child= TheChild::find_by_id($_GET['id']);
$child->delete();
我明白了:Call to undefined method stdClass::delete() 指的是上面的最后一行。为了正确继承,我缺少哪一步?
【问题讨论】:
-
stdClass与您的班级Child不同。你确定这是演示错误的确切代码吗? -
不要显示“喜欢”你拥有的代码,显示你拥有的代码。减少,如果你必须这样做,但不要让我们猜测 =)
-
对不起,我试图展示一般原则。我真的很想知道上述方法是否可行;如果它是正确的,那么我知道问题更深。我会看看我是否可以添加更多。
-
您几乎对制作 SSCCE 有了正确的想法,唯一的事情是您需要确保它重现错误。
-
我添加了更精确的代码
标签: php class inheritance methods