<?php
$HTML_CLASS = 'H1';
abstract class H{
/**
* print Class name
*/
abstract function e();
/**
* @return string Class name
*/
abstract function r();
}
class H1 extends H{
function e(){echo 'H1';}
function r(){return 'H1';}
}
class H2 extends H{
function e(){echo 'H2';}
function r(){return 'H2';}
}
/**
*
* @global string $HTML_CLASS
* @return H
*/
function html(){
global $HTML_CLASS;
return new $HTML_CLASS;
}
$h = html();
$h->e();
?>
<?php
$HTML_CLASS = 'H1';
class H{
private $obj;
public function __construct() {
global $HTML_CLASS;
$this->obj = new $HTML_CLASS;
}
/*
public function e(){
$args=func_get_args(); return call_user_method_array(__FUNCTION__,$this->obj,$args);
}
public function r(){
$args=func_get_args(); return call_user_method_array(__FUNCTION__,$this->obj,$args);
}
public function p($s){
$args=func_get_args(); return call_user_method_array(__FUNCTION__,$this->obj,$args);
}
*/
public function __call($name, $params){
call_user_method_array($name, $this->obj, $params);
}
}
class H1 extends H{
public function __construct(){}
public function e(){echo 'H1';}
public function r(){return 'H1';}
public function p($s){echo $s.'__H1';}
}
class H2 extends H{
public function __construct(){}
public function e(){echo 'H2';}
public function r(){return 'H2';}
public function p($s){echo $s.'__H2';}
}
$h = new H();
$h->e();
$h->p('ddd');
?>
ตัวอย่างล่างไม่เวิร์คอะครับ มันเงียบหายไปเลยแล้วก็ขึ้น The connection was reset
ตัวอย่างแรกจะติดตรงที่ ต้องสร้าง function เหมือนๆกันในทุกๆ class html
ดูโค้ดอีกที Code (PHP)
class html {
private $tag;
public function __construct() {
global $cfg;
$this->tag = new $cfg['html_ver']; // ควรเป็น new html4;
}// __construct
public function __call($name, $arguments) {
global $cfg;
call_user_method_array($name, $this->tag, $arguments);
//return $newhtml->$name($arguments);
}// __call
}
html.php
Code (PHP)
class html4 extends html {
/**
* ทุกๆ function $option ให้ใส่เป็นแบบ array เช่น $html->tag(array('class'=>'classname'));
*/
public function br($option='') {
$output = "<BR";
if ($option != null) {
foreach ($option as $attr=>$val) {
$output .= " ".$attr."=\"".$val."\"";
}
}
$output .= ">";
return $output;
}// br