背景情報:
共通の関数を子クラスから拡張元の基本クラスに移動することで、Yiiアプリの構造を単純化しようとしています。
loadModel($id)
関数をユーザー(子)コントローラーからベースコントローラーに移動しました。
以前は、UserController.phpで。これは機能します:
public function loadModel($id) {
$model = User::model()->findByPk($id);
if ($model === null)
throw new CHttpException(404, 'The requested page does not exist.');
return $model;
}
その後、上記の関数を削除し、UserControllerなどに継承されているController.phpに配置しました。
public function loadModel($id) {
$type = modelname(); // returns a string, i.e.: "User"
$model = $type::model()->findByPk($id);
if ($model === null)
throw new CHttpException(404, 'The requested page does not exist.');
return $model;
}
問題:
PHP 5.4.4を実行しているローカルPCでこれを試しましたが、これはPHP 5.2を実行しているテストサーバーにアップロードされると、HTTPエラー500(内部サーバーエラー)がスローされます。エラーログを表示すると、エラーはエラーでした。これは、3行目の解決演算子PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
を参照しています。
質問:
- この場合、PHP 5.2で解決演算子が失敗する理由は何ですか?と、
- これを同じ効果で機能させるための回避策はありますか?
=================
追加情報:
私が使用しているグローバルmodelname関数は、モデル名を返します。つまり、「User」:
function modelname() {
return Yii::app()->controller->id;
}