php - 从父抽象类调用抽象方法

标签 php oop class abstract

查看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();`

当我运行这个脚本时,我遇到了一个常见的错误 fatal error :在第 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);

我收到错误 fatal error :不在对象上下文中时使用 $this 在指向

的线上
$this->getTableName();

我希望这可能有助于清理一些东西。我有什么办法可以实现这个目标吗? 谢谢!

最佳答案

您的代码示例运行得很好,我不明白您的问题 Demo .

因此,您共享的代码不是您谈论的错误代码。

关于php - 从父抽象类调用抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10461689/

相关文章:

php - 使用 PHP/SQL 动态命名数据库

php - 将帖子包装在 div 中,并将评论包装在同一个 div 中。重现 reddit 嵌套评论 css

php - 如何在接口(interface)文档中记录@throws

c - luajit ffi构造函数参数路由

javascript - 如何专门化一个 Javascript 类?

python - Python 中的 'class A:' 和 'class A(object):' 有什么区别?

php - 在 PHP 中创建动态表

php - 使用 ORDER BY DESC 排名,但更新列

带有初始值设定项的 C++ 匿名类

java - 创建类的 jar 以发送 JAVA 对象