PHP扩展类

PHP扩展类,php,class,extends,object-oriented-database,Php,Class,Extends,Object Oriented Database,我已经用PHP编写了很多面向对象的代码,但到目前为止,我所有的类都是“单数”的,我想你可以调用它。我正在修改几个类(有5个左右相同的方法)来扩展一个类(以消除重复代码)。我遇到了一些问题 我试图访问父类中的方法,但您可以看到问题 父类: class DatabaseObject { public static function find_all() { return self::find_by_sql("SELECT * FROM " . self::$table

我已经用PHP编写了很多面向对象的代码,但到目前为止,我所有的类都是“单数”的,我想你可以调用它。我正在修改几个类(有5个左右相同的方法)来扩展一个类(以消除重复代码)。我遇到了一些问题

我试图访问父类中的方法,但您可以看到问题

父类:

 class DatabaseObject { 

     public static function find_all() {
        return self::find_by_sql("SELECT * FROM " . self::$table_name);
    }
}
儿童班:

class Topics extends DatabaseObject {

    protected static $table_name = "master_cat";
    protected static $db_fields = array('cat_id', 'category');
    public $cat_id;
    public $category;

  }
试图从php/html文件访问此表中所有信息的代码:

$topics=Topics::find_all();

foreach($topics as $topic):
    echo $topic->category;
endforeach; 

正如您所看到的,大多数代码尚未合并到新的工作方式中。我需要更改self::$table_name,它不再以新的方式工作。我将有大约5个类扩展这个对象,那么什么是最好的编码方式,这样我就可以用一个方法访问不同的表(而不是包括这个确切的find_all()方法在5个不同的类中使用。

您应该研究PHP中的概念。这允许您从调用的类中访问静态常量或函数。

您可以尝试使用后期静态绑定,或者也可以使用单例解决方案:

<?php
abstract class DatabaseObject {
  private $table;
  private $fields;

  protected function __construct($table, $fields) {
    $this->table = $table;
    $this->fields = $fields;
  }

  public function find_all() {
    return $this->find_by_sql('SELECT * FROM ' . $this->table);
  }
}

class Topics extends DatabaseObject {
  private static $instance;

  public static function get_instance() {
    if (!isset(self::$instance)) {
      self::$instance = new Topics('master_cat', array('cat_id', 'category'));
    }

    return self::$instance;
  }
}

Topics::get_instance()->find_all();

我建议你阅读更多关于OOP的内容,尤其是它在PHP中的实现方式。给你一个工作代码并不能解决真正的问题。相反,我是从别人的代码中学习的。也许我现在会等别人真正回答这个问题。我读过“我从别人的代码中学习”经常要知道,它不太好。你应该考虑读一本书。Link KSPAM:我认为这个问题没有错,只是没有人有答案。但是感谢@ Matthijs,我们被启发了+ 1来教我们,并且让每个人都闭口不言。