php - 简单工厂模式中的问题,总是报错
本文介绍了php - 简单工厂模式中的问题,总是报错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
<?php
//接口
interface calc{
public function getResult();
}
//运算类
class Operation{
protected $num1=0;
protected $num2=0;
protected $result=0;
public function setNum($num1,$num2){
$this->num1 = $num1;
$this->num2 = $num2;
}
}
//四则运算类
class OperAdd extends Operation implements calc{
public function getResult(){
return $this->result=$this->num1+$this->num2;
}
}
class OperSub extends Operation implements calc{
public function getResult(){
return $this->result=$this->num1-$this->num2;
}
}
class OperMul extends Operation implements calc{
public function getResult(){
return $this->result=$this->num1*$this->num2;
}
}
class OperDiv extends Operation implements calc{
public function getResult(){
if(intval($this->num2)==0){
return $this->result="被除数不能为‘0’!";
}else{
return $this->result=$this->num1/$this->num2;
}
}
}
class OperFactory{
private static $obj;
public static function createrOper($type){
try {
switch ($type){
case'+';
self::$obj = new OperAdd();
break;
case'-';
self::$obj = new OperSub();
break;
case'*';
self::$obj = new OperMul();
break;
case '/':
self::$obj = new OperDiv();
break;
default:
throw new Exception('unknow type');
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
$obj = OperFactory::createrOper('+');
$obj->setNum(2,2);
echo $obj->getResult();
// $obj= OperFactory::createrOper('+');
// $obj->setNum(2, 2);
// var_dump($obj);
// echo $obj->getResult();
问题就在 $obj->setNum(2,2); 这里,但是怎么看流程,都好像没什么问题的
解决方案
$obj = OperFactory::createrOper('+');这个OperFactory的createOper方法没有返回值,应该return self::$obj = new OperAdd()
这篇关于php - 简单工厂模式中的问题,总是报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文