扩展A PHP Class - 帮助理解
Extending A PHP Class - Help Understanding
我有点难以理解 class 如何扩展另一个。我有我的模型 class.
class model{
public $db;
public function __construct(){
$this->db = $GLOBALS['db'];
}
public function _sel($table, $where="", $order_by="", $limit="", $group_by="",$database = NULL){
if($database === NULL) { $database = $this->db; }
// Yada Yada Yada
$results = $database->select($sql);
}
我有一个分页 class 来扩展它:
class pagination extends model {
public $limit;
public $page;
public $criteria;
private $_totalRecords;
private $_totalPages;
public function __construct(){
// Initialize
$arguments = func_get_args();
if(!empty($arguments)){
foreach($arguments[0] as $key => $property){
if(property_exists($this, $key)){
$this->{$key} = $property;
}
}
}
}
public function getPaginationPage(){
// Yada Yada Yada
// This next line causes the issue
$records = $this->_sel($query['table'],$query['where'],$query['order_by'],$start." , ".$end,$query['group_by'],$query['database']);
为了使这篇 post 简短,我尝试只包含必要的代码部分。我遇到的问题是,当我在扩展 class 中执行查询时,它失败了,因为 $this->db 没有值。因为我在构造函数中设置了它,所以在我看来我需要用 $xx = new model() 之类的东西再次调用它但是因为它只是应该已经存在的 class 的扩展我很困惑为什么它还没有价值。不可否认,我是自学的,刚刚开始进入 classes。我对他们的理解是错误的还是我需要做些什么来确保它 "extends"?
这也是我调用扩展 class:
的方式
$this->model->pagination = new pagination(array(
'limit' => 10,
'page' => 1,
'criteria' => array('projects','status_id > 0','name ASC',''),
));
您已经覆盖了 pagination
class 中的 model
构造函数。只需从 child 的 构造函数中调用 parent 的 构造函数即可保留两者:
class pagination extends model {
...
public function __construct() {
parent::__construct();
...
我有点难以理解 class 如何扩展另一个。我有我的模型 class.
class model{
public $db;
public function __construct(){
$this->db = $GLOBALS['db'];
}
public function _sel($table, $where="", $order_by="", $limit="", $group_by="",$database = NULL){
if($database === NULL) { $database = $this->db; }
// Yada Yada Yada
$results = $database->select($sql);
}
我有一个分页 class 来扩展它:
class pagination extends model {
public $limit;
public $page;
public $criteria;
private $_totalRecords;
private $_totalPages;
public function __construct(){
// Initialize
$arguments = func_get_args();
if(!empty($arguments)){
foreach($arguments[0] as $key => $property){
if(property_exists($this, $key)){
$this->{$key} = $property;
}
}
}
}
public function getPaginationPage(){
// Yada Yada Yada
// This next line causes the issue
$records = $this->_sel($query['table'],$query['where'],$query['order_by'],$start." , ".$end,$query['group_by'],$query['database']);
为了使这篇 post 简短,我尝试只包含必要的代码部分。我遇到的问题是,当我在扩展 class 中执行查询时,它失败了,因为 $this->db 没有值。因为我在构造函数中设置了它,所以在我看来我需要用 $xx = new model() 之类的东西再次调用它但是因为它只是应该已经存在的 class 的扩展我很困惑为什么它还没有价值。不可否认,我是自学的,刚刚开始进入 classes。我对他们的理解是错误的还是我需要做些什么来确保它 "extends"?
这也是我调用扩展 class:
的方式$this->model->pagination = new pagination(array(
'limit' => 10,
'page' => 1,
'criteria' => array('projects','status_id > 0','name ASC',''),
));
您已经覆盖了 pagination
class 中的 model
构造函数。只需从 child 的 构造函数中调用 parent 的 构造函数即可保留两者:
class pagination extends model {
...
public function __construct() {
parent::__construct();
...