web-dev-qa-db-ja.com

PHPで変数を初期化/宣言する必要がありますか?

この質問の目的は、私と私のような多くの人だけのために知識や情報を得ることです。

だから私の質問は:

ループまたは関数の前に変数を初期化/宣言する必要がありますか?

この質問をすることは混乱を招きます。なぜなら、変数を初期化/宣言する前にコードが機能するかどうかだからです。

私が実際に意味するもののデモコードを共有しています:

$cars = null;

foreach ($build as $brand) {
     $cars .= $brand . ",";
}

echo $cars;

OR

foreach ($build as $brand) {
     $cars .= $brand . ",";
}

echo $cars;

どちらのコードも同じように機能するため、最初に変数を初期化/宣言する必要がありますか?

28
Omer

PHPでは必要ありませんが、常に変数を初期化することをお勧めします。

変数をデフォルト値で初期化しない場合、PHPエンジンは変数の使用方法に応じて型キャストを行います。これにより、予期しない動作が発生する場合があります。

要するに、私の意見では、常に変数のデフォルト値を設定します。

追伸あなたの場合、他の文字列を連結するために値を使用しているため、値はnullではなく ""(空の文字列)に設定する必要があります。

編集

他の人(@ n-dru)が指摘したように、デフォルト値を設定しないと、通知が生成されます。

30
Alexander

空の文字列$cars = '';を割り当てることをお勧めします。それ以外の場合(エラー報告がある場合)、通知が表示されます。

通知:未定義変数:車

PHPは、それが空であり、結果の文字列は同じであると想定しますが、その通知をログに記録する必要があるために余分なオーバーヘッドが発生しないようにする必要があります。 performance-wiseでは、最初に空を割り当てる方が良いでしょう。

また、Aptanaなどのエディターを使用して、F3を押して、指定された変数の発生元を確認することもできます。そして、どこかで初期化するのはとても快適です。 debugging-wiseでは、変数の出生の明確な場所を確保することもお勧めです。

16
n-dru

依存します:関数の外で変数を宣言する場合、その変数は「グローバルスコープ」を持ちます。つまり、変数は関数の外からしかアクセスできません。

関数内で変数が宣言されている場合、変数は「ローカルスコープ」を持ち、その関数内でのみ使用できます。 ( http://www.w3schools.com/php/php_variables.asp

ただし、関数の外部で定義した変数「cars」は、グローバルキーワードがなくても関数に対して機能するようです...

0
Nicole