PHP class: inheritance or import?
Blogs20112011-06-30
When applying PHP 3rd-party tools into application, such as Smarty template, we have at least 2 choice:
- Extend our class as a sub-class of Smarty
This is like 1 big object to hold different resources, orgnized by associated tables (hash tables) inside this object. - Import Smarty into our codes, create a Smarty object aside within our class.
This is like 2 seperated objects to hold each properties and methods: 1 is Smarty object, 1 is our own class object.
From the point of security, re-use and non memory-conflict, I prefer to the first. By using cascade classes, it is easy to extend to implment different business logic. (1) The basic class is like:
class SmartyExtendBase extends Smarty {
var $mdb2, $template_dir, $compile_dir, $config_dir, $cache_dir;
function __construct() {
parent::__construct();
$this->mdb2 = $this->pear_connect_test();
$this->caching = false;
$this->template_dir = TEMPLATES;
$this->compile_dir = TEMPLATES_C;
$this->config_dir = CONFIGS;
$this->cache_dir = CACHE;
...
}
...
}(2) The extend class is:
class ExtendClass extends SmartyExtendBase, FPDF
{
var $url, $html, $div, $data, $ini_array, $fpdf;
public function __construct() {
parent::__construct();
$this->url = $_SERVER['PHP_SELF'];
$this->html = substr(strrchr($this->url, '/'), 1, -4);
$this->div = PAGINATION;
$this->data = array();
$this->sql = "SELECT count(*) FROM " . TEST;
$this->ini_array = array();
...
}
...
}In the child class, it inherits Smarty object, FPDF object, as well as it’s own property and methods, a Big powerful object to use.
