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);
}