Php 从子类调用父方法

Php 从子类调用父方法,php,class,inheritance,methods,parent-child,Php,Class,Inheritance,Methods,Parent Child,我在类继承方面遇到了一些困难。我有5个类,所有这些类都通过创建、更新和删除方法访问我的数据库,我将这些方法抽象为一个MasterDatabase类,然后让它们都扩展这个类。我遇到的问题是基本继承概念。我浏览过软件,很多人问过类似的问题,但不完全是这个问题 class DatabaseMaster { public function create() { $attributes = $this->attributes(); $question_

我在类继承方面遇到了一些困难。我有5个类,所有这些类都通过创建、更新和删除方法访问我的数据库,我将这些方法抽象为一个MasterDatabase类,然后让它们都扩展这个类。我遇到的问题是基本继承概念。我浏览过软件,很多人问过类似的问题,但不完全是这个问题

  class DatabaseMaster {

    public function  create() {
        $attributes = $this->attributes();
        $question_marks = array();
        foreach ($attributes as $key => $value) {
        $question_marks[] = "?";
         }
        $place_holder = array_intersect_key($attributes, get_object_vars($this));
        $place_holder = array_values($place_holder);
        $sql = "INSERT INTO ".self::$table_name." (";
        $sql .= join(", ", array_keys($attributes));
        $sql .= ") VALUES (";
        $sql .= join(", ", array_values($question_marks));
        $sql .= ")";
        $query = $handler->prepare($sql);
        $query->execute($place_holder);
   }

 }
现在,如果我有一个类用户。我希望这是为了扩展DatabaseMaster,我想它不能像上面那样继承这个create函数?例如,我的问题是在方法中对$this->attributes的引用。DatabaseMaster没有属性,但我的用户类当然有。如果我运行$user->create();它不起作用,我想是因为这个。如何克服这个问题?我为目前过度使用软件而道歉

这是有效的

 public function  create() {
    $attributes = $this->attributes();
    $question_marks = array();
    foreach ($attributes as $key => $value) {
    $question_marks[] = "?";
    }
    $place_holder = array_intersect_key($attributes, get_object_vars($this));
    $place_holder = array_values($place_holder);
    $sql = "INSERT INTO users (";
    $sql .= join(", ", array_keys($attributes));
    $sql .= ") VALUES (";
    $sql .= join(", ", array_values($question_marks));
    $sql .= ")";
    $query = $handler->prepare($sql);
    $query->execute($place_holder);
}

所以我的问题很清楚……如何在方法中使表名动态,以便在子对象调用它时它引用子对象

您可以按原样解释方法。考虑下面的例子:

class P {

        function create() {
                echo $this->attributes . "\n";
        }
}

class C extends P {
        public $attributes = "hello!";
}

$c = new C;

$c->create();

这就像您所期望的那样,并且父对象上的
create()
方法响应子对象中定义的
$attributes
的值。

您没有错。我可以看出您的示例工作得很好。但是,我无法让我的用户继承这个create函数……这里的问题是对SELF::$TABLE\u NAME的引用。您能否以这种方式在父方法中调用“self”,并期望它在子方法调用该方法时引用子方法的表名?