您好,欢迎访问一九零五行业门户网

PHP好的方法书写不同名但方法相同的类

比如说:
class a { private $value = null; public function __construct() { $this->value = 1; }}class b { private $differentvalue = null; public function __construct() { $this->differentvalue = 1; }}

a和b的作用完全不同, 他们两个没有办法合并。
class c extends a { public function display() { echo ok; }}class d extends b { public function display() { echo ok; }}

c和d的内容又完全相同, 这样的情况有没有什么好的方法把c和d的内容只写一遍?
因为要向下兼容5.3的, 所以trait不能用~~~
回复内容: 比如说:
class a { private $value = null; public function __construct() { $this->value = 1; }}class b { private $differentvalue = null; public function __construct() { $this->differentvalue = 1; }}

a和b的作用完全不同, 他们两个没有办法合并。
class c extends a { public function display() { echo ok; }}class d extends b { public function display() { echo ok; }}

c和d的内容又完全相同, 这样的情况有没有什么好的方法把c和d的内容只写一遍?
因为要向下兼容5.3的, 所以trait不能用~~~
class a {private $value = null;public function __construct() {$this->value = 1;}}class b {private $differentvalue = null;public function __construct() {$this->differentvalue = 1;}}/*** @method void display()*/class c extends a {private $handler = null;public function __construct() {parent::construct();$this->handler = new e();}public function __call($name, $params) {if ( method_exists($this->handler, $name) ) {return call_user_func_array(array($this->handler, $name), $params);} else {throw new exception('method '.$name.' does not exists.');}}}/*** @method void display()*/class d extends b {private $handler = null;public function __construct() {parent::construct();$this->handler = new e();}public function __call($name, $params) {if ( method_exists($this->handler, $name) ) {return call_user_func_array(array($this->handler, $name), $params);} else {throw new exception('method '.$name.' does not exists.');}}}class e {public function display() {echo ok;}}
http://3v4l.org/ns6q7
value = 1; }}class b{ public $name = 'b'; private $differentvalue = null; public function __construct() { $this->differentvalue = 1; }}class cd{ private $parent = null; public function __construct($parent) { $this->parent = new $parent; } public function __call($name, $params) { if ( is_callable(array($this->parent, $name)) ) { return call_user_func_array(array($this->parent, $name), $params); } else { throw new exception('method '.$name.' should be callable.'); } } public function __get($property_name){ if(isset($this->$property_name)) { return $this->$property_name; } elseif (isset($this->parent->$property_name)) { return $this->parent->$property_name; } else { return null; } } public function display() { echo ok; }}$c = new cd(new b);var_dump($c->name);
其它类似信息

推荐信息