2016-12-23 3 views
2

コンテキストコードにジャンプしましょう。 (1)これは正常に動作します...if文内でクラスを見つける特別な条件はありますか?

を以下をお読みください:

new myClass(); 

class myClass{ 
    // Stuff 
} 

(2)(致命的なエラークラスが見つからない)動作しません:

if ($_POST['apikey'] == "foo") { 
    new myClass(); 

    class myClass{ 
     // Stuff 
    } 
} 

(3)上記の解決策:

if ($_POST['apikey'] == "foo") {   
    class myClass{ 
     // Stuff 
    } 

    new myClass(); 
} 

なぜ私はそれを修正するために何をしたのか分かりません。私はそれがスクリプト言語だと知っていますが、なぜ(1)働くでしょうか? if文やそれに類するもので入れ子にしたら、それは動作しないPHPの生活の質の一種ですか?

+4

クラスと関数を条件付きで作成することは悪い習慣であり、巨大なデバッグ頭痛を引き起こします。 – Devon

+2

クラスを自分のファイルに入れ、オートローダーを使用してクラスをロードする必要があります(レイジーローディング=それらを使用しない限り含まれません)。その後、現在のソリューションでは使用できない再利用も可能です。 –

+2

あなたのクラス定義は条件付きであり、それを使用しようとすると___after___定義されます。条件付きで定義されたクラスは一般的には良いアイデアではなく、オートローダーを使ったクラスファイルの方がはるかに効率的です –

答えて

7

PHPは実行前にスクリプトをコンパイルおよび解析します。したがって、スクリプトの実行を開始する前に定義について知っています。

条件付き定義がある場合、コンパイラはスクリプトが実行されるまでその条件がどれくらいのものかを知ることができないため、これはブロックされます。

私の意見では、条件内でクラス、関数、または定数を決して定義しないでください。それは何のための変数です。

+0

場合によってはこれが受け入れられるかもしれません。たとえば、コード生成、または他の特別なもの用。しかし、それがどういう仕組みか正確に知っていれば、それだけです。 – Timurib

関連する問題