この質問を見た後、私は自分で選んだ答えを試しました!だから基本的に私が書いたのは`
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();
これがいくつかのものを片付けるのに役立つことを願っています。これを達成する方法はありますか?ありがとう!