[英]Calling an Abstract method from parent abstract class
看完這個問題后 ,我自己嘗試了所選擇的答案! 基本上我寫的是`
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。
那么,我如何從父類調用抽象?
我想要做的真正的事情是創建一個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();
我希望這可能有助於清理一些東西。 有什么辦法可以實現嗎? 謝謝!
你的代碼示例工作得很好,我不明白你的問題Demo 。
因此,您共享的代碼不是您與錯誤所討論的代碼。
您不能將變量稱為類的成員,因為您將其聲明為靜態變量。 調用靜態變量看起來與調用靜態函數時相同,使用::運算符。
class User extends DatabaseObject {
protected static $table_name = "users";
protected function getTableName(){
return self::$table_name;
}
}
您無法訪問同一抽象類中的抽象函數。
你需要什么,你必須只在子類中調用該方法,抽象超類不會調用子類函數。
編輯:
因為函數dosent存在於該類中。
第一件事是你不能在同一個類中調用抽象函數。 你正在調用test(); 在myfunc()中,oops不允許這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.