The*_*ter 11 php extends class object-oriented-database
我已经在面向对象的PHP中完成了大量的代码,但到目前为止,我的所有类都是"单数",我想你可以调用它.我正在改变几个类(有5个左右相同的方法)来扩展一个类(以摆脱重复的代码).我遇到了一些问题.
我试图访问父类中的方法,但您可以看到问题.
家长班:
class DatabaseObject {
public static function find_all() {
return self::find_by_sql("SELECT * FROM " . self::$table_name);
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
class Topics extends DatabaseObject {
protected static $table_name = "master_cat";
protected static $db_fields = array('cat_id', 'category');
public $cat_id;
public $category;
}
Run Code Online (Sandbox Code Playgroud)
代码尝试从php/html文件访问此表中的所有信息:
$topics=Topics::find_all();
foreach($topics as $topic):
echo $topic->category;
endforeach;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,大多数代码尚未合并到新的处理方式中.我需要更改self :: $ table_name,它不再以我正在做的新方式工作.我将有大约5个类扩展这个对象,所以最好的编码方式是什么,所以我可以用一个方法访问不同的表(而不是在5个不同的类中包含这个精确的find_all()方法.
小智 28
您可以尝试延迟静态绑定,如下所述,或者单例解决方案也可以正常工作:
<?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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28591 次 |
| 最近记录: |