请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于工厂模式中的优化反射类的应用,静态调用和动态调用问题

return KaTeX parse error: Expected 'EOF', got '\ReflectionClass' at position 29: …== true ? (new \̲R̲e̲f̲l̲e̲c̲t̲i̲o̲n̲C̲l̲a̲s̲s̲(className))->newInstanceArgs(params):params):params):className;
这个返回值统一用
$aliSms = classObj::sendCode(classObj::sendCode(classObj::sendCode(phone,$code);
这种调用静态调用方式不行吧?
如果不行 在calssAttr.php文件应该不是静态方法和动态方法通用的吧?

正在回答 回答被采纳积分+3

插入代码

2回答

提问者 淹死De鱼 2020-10-15 09:34:41

public static function smsClassStat(){
   return [
       "ali" => "app\common\lib\sms\AliSms",
       "baidu" => "app\common\lib\sms\BaiduSms",
       "jd" => "app\common\lib\sms\JdSms",
   ];
}

public static function initClass ($type,$classes,$params=[],$needInstance = false){
   if(!array_key_exists($type,$classes)){
       return false;
   }
   $className = $classes[$type];

return $needInstance == true?(new \ReflectionClass($className))->newInstanceArgs():$className;

}

上面是关于短信验证的优化代码

这是调用,视频中是说短信验证优化可以适用静态调用和动态调用两种方式,但是在business层调用的统一动用静态调用

$classStats = ClassAttr::smsClassStat();
$classObj = ClassAttr::initClass($type,$classStats);
$aliSms = $classObj::sendCode($phone,$code);

如果都用$classObj::sendCode($phone,$code)这种调用是否能用(包括动态调用,这种调用好像只能用于静态方法的作用)?

我测试了一下 把短信验证的静态方法全部改了,会报错,说$classObj::sendCode($phone,$code);这Non-static method app\\common\\lib\\sms\\AliSms::sendCode() should not be called statically(非静态方法app\\common\\lib\ sms\\AliSms::sendCode()不应该被静态调用),在lib层是不是要更改代码  做一步判断

$needInstance = false;

$classStats = ClassAttr::smsClassStat();
$classObj = ClassAttr::initClass($type,$classStats,$needInstance);

if(!$needInstance){

$aliSms = $classObj::sendCode($phone,$code);

}else{

$aliSms = $classObj->sendCode($phone,$code);

}



0 回复 有任何疑惑可以回复我~
singwa 2020-10-14 12:52:43

您好。您代码写清楚点哈。方便老师快速帮您定位问题,谢谢。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号