我需要通过字符串名称创建一个模型,它是一个变量。
Book
当我将Class backend\models\Book does not exist
(从DB中提取)作为modelName传递给函数时,它将引发错误:$modelName= "backend\\models\\Book";
。
但是当我写 public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
}
}
时效果很好。
我知道这是因为运行时和编译时。但我不知道如何解决。因为$ modelName是在运行时表征的。
答案 0 :(得分:2)
您正在使用对象访问静态方法。您应该仅使用类名访问静态方法,例如:
$modelName = 'backend\models\\' . $modelName;
$model = $modelName::find();
请记住,$modelName::find()
不会返回模型,而只会返回模型的查询对象。要获得模型,您应该使用例如:$modelName::find()->where(['id'=>$your_value])->one();