1

私の質問は非常に簡単です。クラスでこのコードを見ました:

class controller_activity {
    function __construct($args) {
        //the variable template is not defined or what happen??
        $this->template = new Template('activity');     
    }
    .......

ふつうは「public $template」などのクラスで変数の宣言を見かけますが、この場合も同じで、その変数をいつものように定義すれば、事前に定義せずに、このように直接変数を追加できますか? ?、お勧めですか?

4

4 に答える 4

1

投稿したコードは問題なく動作します。

PHP では、宣言されていない変数を使用できます。他の言語 (Java など) では、宣言されていない変数を使用できません。単にスタイルの問題ですが、個人的には使いたくないです。

あなたの例のように宣言されていない場合、テンプレート変数は公開されていることに注意してください

于 2013-01-24T15:04:15.837 に答える
1

これらの変数を通常どおり定義した場合と同じですか?

いいえ、定義がありません。get_object_varsそれらを表示しますが、表示しget_class_varsません。

この方法で変数を直接追加できますか?,

はい、可能です。それらは公開されます。

前に定義せずに?,

はい、事前に定義しなくても構いません。それらは公開されます。

それはお勧めですか?

場合によります。通常はそうではありませんが、この規則には例外があります。

于 2013-01-24T14:56:25.787 に答える
1

このコードが機能する理由は、クラスのインスタンス化の直後に$this->template割り当てが行われているためだと思います。__construct()したがって、これはずさんな (しかしごちゃごちゃしやすい) 変数割り当てを行う方法と見なされる可能性があります。ただし、読みやすさや後でデバッグするのには役立ちません。したがって、答えはイエスです。これは可能です。それは「ベストプラクティス」ですか?100%いいえ。

于 2013-01-24T14:57:05.197 に答える
1

推奨されていませんが、PHP とその変数の非制約 (弱い型付け) の使用は、その場でクラス変数を宣言できることを意味します。

私は何度も偶然にそれをしましたが、戻ってそれらを適切に定義しました。デフォルトでは、publicアクセス メソッドがあります (クラスの先頭にアクセス メソッドを含めないのと同じ動作、つまり$var = 0vs private $var = 0)。

繰り返しますが、これはお勧めできません。具体的にはテストしていませんが、Noticeエラーがスローされると思います。もう 1 つの問題は、これを行うと、コードを追跡するのが難しくなることです。これは、後で自分自身や、クラスを操作しようとしている別の開発者にとって、コードを追跡するのが難しくなります。

于 2013-01-24T15:00:11.013 に答える