###前提・実現したいこと
一旦動作確認を取ったFuelPHPで作った処理を、アクションメソッド内で行うフォーム作成やバリデーションまわりを共通処理としてアクションメソッドの外に出そうとしたところ、ハマってしまいました。
起因はPHP5.3系の問題らしいのですが、回避する方法を知りたいです。
分析用パラメータをフォーム送信にて受信し、集計結果をHTMLの表にするか、CSV出力するか、PDF出力するか、でアクションメソッドを分けていて、どれも分析用パラメータの項目は同じで受付可能な条件も同じなため、共通化しようとしました。
###発生している問題・エラーメッセージ
Fatal error: Cannot access self:: when no class scope is active in /home/XXXXXX/fuelphp/fuel/app/classes/controller/kobu.php on line 622
###該当のソースコード
PHP
1case '8': /* レディース */ 2 if ($p_include['brand']['8'][0] == '') 3 { 4 $err_flg = true; 5 Validation::active()->set_message('include_1', '絞込 レディースブランド指定が正しくありません。'); 6 return false; 7 } elseif ($p_include['brand']['8'][0] != 'all') 8 { 9 if (!array_key_exists($p_include['brand']['8'][0], self::$arr_brd_8)) //// <- ここが622行め 10 { 11 $err_flg = true; 12 Validation::active()->set_message('include_1', '絞込 レディースブランド指定が正しくありません。'); 13 return false; 14 } 15 } 16 break;
$arr_brd_8
の宣言箇所は
PHP
1class Controller_Kobu extends Controller_Tmplcmn 2{ 3 static $arr_brd_1, $arr_brd_2, $arr_brd_3, $arr_brd_8, $arr_brd_9; 4 static $arr_ib;
###試したこと
$arr_brd_8
らを、先に単にpublicとして、$this->arr_brd_8
などとしてアクセスしていて、ローカルでは動作確認が取れました。
それをサーバーにアップロードしたら「Using $this when not in object context」っていうfatal errorになりました。
回避する方法を探して、static宣言にしたり、self::$arr_brd_8
としてアクセスするように書き換えて、ローカルでは動作確認が取れましたが、サーバーでは「Cannot access self:: when no class scope is active」というfatal errorになりました。
###補足情報(言語/FW/ツール等のバージョンなど)
FuelPHP v1.7.2
ローカルテスト環境:PHP 5.4.16
サーバー実行環境:PHP 5.3.15
現状の経緯をブログに書いております:FuelPHPもPHP 5.4以降が必須なのかなぁ
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/06/21 08:28