我已经在 PHP 中做了很多面向对象的代码,但是到目前为止,我所有的类都是“单数”,我想你可以称之为。我正在改变几个类(有 5 个左右相同的方法)来扩展一个类(以摆脱重复的代码)。我遇到了一些问题。
我试图访问父类中的方法,但你可以看到这个问题。
父类:
cl DatabaseObject {
public static function find_all() {
return self::find_by_sql("SELECT * FROM " . self::$table_name);
}
}
子类:
cl 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 个 Cles 扩展这个对象,那么编码这个的最好方法是什么,这样我就可以用一个方法访问不同的表 (而不是在 5 个不同的类中包含这个确切的 find_all () 方法。

您可以尝试后期静态绑定为mentioned below,或者单例解决方案也应该工作:
<?php
abstract cl 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);
}
}
cl 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();
您应该研究 PHP 中Late Static Binding的概念。这允许您从调用的类访问静态常量或函数。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(86条)