工厂方法模式
没有做反射类检测
$name; } public function __set($name, $value) { $this->$name = $value; } public function getResult() { return 0; }}class OperationAdd extends Operation{ public function getResult() { return $this->_num1 + $this->_num2; } }class OperationSub extends Operation{ public function getResult() { return $this->_num1 - $this->_num2; }}class OperationMul extends Operation{ public function getResult() { return $this->_num1 * $this->_num2; }}class OperationDiv extends Operation{ public function getResult() { if (empty($this->_num2)) { throw new Exception("除数不能为0", 1); } return $this->_num1 / $this->_num2; }}// ********** 工厂接口 - 类 ********** //Interface IFactory{ public function CreateOperation();}class AddFacroty implements IFactory{ public function CreateOperation() { return new OperationAdd(); }}class SubFactory implements IFactory{ public function CreateOperation() { return new OperationSub(); }}class MulFactory implements IFactory{ public function CreateOperation() { return new OperationMul(); }}class DivFactory implements IFactory{ public function CreateOperation() { return new OperationDiv(); }}// clienttry { //工厂方法 $f = new AddFacroty(); $o = $f->CreateOperation(); $o->_num1 = 10; $o->_num2 = 2; print_r($o->getResult());} catch (Exception $e) { echo $e->getMessage();}