关于工厂模式中的优化反射类的应用,静态调用和动态调用问题
来源:7-11 代码高度优化-利用反射机制处理工厂模式做到真正的高大上思想

淹死De鱼
2020-10-13
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文件应该不是静态方法和动态方法通用的吧?
2回答
-
淹死De鱼
提问者
2020-10-15
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);
}
00 -
singwa
2020-10-14
您好。您代码写清楚点哈。方便老师快速帮您定位问题,谢谢。
00
相似问题