繁体   English   中英

从父抽象类调用抽象方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM