我已经在面向对象的
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; }
$topics=Topics::find_all(); foreach($topics as $topic): echo $topic->category; endforeach;
正如您所看到的,大多数代码尚未合并到新的处理方式中.我需要更改self :: $table_name,它不再以我正在做的事情的新方式工作.我将有大约5个类扩展这个对象,所以最好的编码方式是什么,所以我可以用一个方法访问不同的表(而不是在5个不同的类中包含这个精确的find_all()方法.
您可以尝试将后期静态绑定设置为
mentioned below,或者单个解决方案也可以正常工作:
<?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();