看了this question之后,我自己尝试了所选择的答案! 基本上我写的是`
abstract class person
{
function __construct()
{
// some code here
}
function myfunc()
{
$this->test();
}
abstract function test();
}
class employee extends person
{
function __construct()
{
parent::__construct();
}
function test()
{
echo "So you managed to call me !!";
}
}
$employee = new employee();
$employee->myfunc();`
当我运行此脚本时,我遇到了一个常见的错误 致命错误:不在第7行的对象上下文中时使用$ this。
那么,如何从父类调用Abstract?
我想要做的真正的事情是创建一个DatabaseObject类,它包含不同数据库对象的所有常用方法,并使类扩展它。
abstract class DatabaseObject {
abstract protected function getTableName();
public static function find_by_id($id = 0){
global $database;
$class = get_called_class();
$result_array = self::find_by_sql("SELECT * FROM ". $this->getTableName() ." WHERE _id = {$id} LIMIT 1");
echo $result_array . "<br />";
return !empty($result_array) ? array_shift($result_array) : false;
}
public static function find_by_sql($sql=""){
global $database;
$result_set = $database->query($sql);
$object_array = array();
while ($row = $database->fetch_array($result_set)){
$object_array[] = self::instantiate($row);
}
return $object_array;
}
}
}
所以这是我的DatabaseObject类的一部分。我的用户类如下
class User extends DatabaseObject {
protected static $table_name = "users";
protected function getTableName(){
global $table_name;
return $table_name;
}
}
现在,每当我做
$user = new User();
$user->findById(1);
我收到错误致命错误:在不在对象上下文中时使用$ this 在指向
的行上$this->getTableName();
我希望这可能有助于清理一些东西。有什么办法可以实现吗? 谢谢!
答案 0 :(得分:1)
您的代码示例运行正常,我不明白您的问题Demo。
因此,您共享的代码不是您与错误所讨论的代码。
答案 1 :(得分:1)
您不能将变量称为类的成员,因为您将其声明为静态变量。对静态变量的调用看起来与调用静态函数时相同,使用:: operator。
class User extends DatabaseObject {
protected static $table_name = "users";
protected function getTableName(){
return self::$table_name;
}
}
答案 2 :(得分:0)
您无法访问同一抽象类中的抽象函数。
你需要什么,你只需要在子类中调用该方法,抽象超类不会调用子类函数。
修改强>
因为函数dosent存在于该类中。
答案 3 :(得分:0)
首先,你无法在同一个类中调用抽象函数。你正在调用test();在myfunc()中,oops不允许这样做。