วันเสาร์ที่ 15 มกราคม พ.ศ. 2554

add dynamic method to object


<?php

class MyPrinter{
public static function echoStar($obj,$s){
echo '*******',$obj->data,'********',$s;
}
public static function echoLine($obj,$s){
echo '<br>--------------',$obj->data,'----------',$s;
}
public static function AddTo($obj){
$m = get_class_methods(__CLASS__);
foreach($m as $i)$obj->methods[$i] = array(__CLASS__,$i);
}
}

class MyData
{
public $methods = array();
public $data;
public function __construct($data) {
$this->data = $data;
}
public function __call($name,$args){
if (in_array($name,array_keys($this->methods))){
array_unshift($args,$this);
return call_user_func_array($this->methods[$name],$args);
}else{
die('call undefined function '.$name.'.');
}
}
}

$c = new MyData('hello');
MyPrinter::AddTo($c);
echo $c->echoStar('aaaaaaa');
echo '<hr>';
echo $c->echoLine('bbbbbbb');

?>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น