2012-06-14 17 views
36

私は何年もPHPで個人用スクリプトをコーディングしていて、エラー表示をオフにしています。私はこれらのスクリプトのいくつかをリリースしようとしており、それを適切な方法で実行したいと考えています。PHPで複数の変数を宣言する適切な方法

エラー表示をオフにする唯一の理由は、isset()のおかげですべての単一のvarを使用する前にテストする必要がなくなります。

だから、ここに私の質問です:

はこれより複数のvarを宣言するための良い方法はありますか?

<?php 
    // at the begining of my main file 
    if (!isset($foo)) ($foo = ''); 
    if (!isset($bar)) ($bar = ''); 
    if (!isset($ping)) ($ping = ''); 
    if (!isset($pong)) ($pong = ''); 
    // etc. for every single var 
?> 

例えば、このような何か:

<?php 
    var $foo, $bar, $ping, $pong; 
?> 
+3

'var $ foo'を空文字列にすることが奇妙に思えます。後で何をして問題を引き起こす操作ですか? –

+2

私はこれについて何か分かりません。あなたがそれを設定できるかどうかをチェックするように設定する前に、変数をテストしていますか? 'dim d as Integer'のような変数を設定しなければならない別の言語から来ていますか?あなたが本当に必要とするのは、関数、クラスなどのようなカプセル化です。グローバルな名前空間から抜け出し、各関数/クラスメソッドの先頭に変数を宣言するという習慣があります。 –

+0

@MikeB:簡単なテスト。 varが最初に宣言されていない場合、単純な 'if($ foo == 'blabla')'はエラーを表示します。 –

答えて

7

あなたif()isset()との試みはそれを行うための適切な方法です!

しかし、あなたはTernary Operatorを使用して、少し短い/読みやすく、それを書くことができます:

$foo = isset($foo) ? $foo : ''; 

=後の状態が他の、真であるときに最初$foo?後の値に設定されます:の後の値に設定されます。条件(=?の間)は常にブール値としてキャストされます。

は、PHP 5.3 ので、あなたはそれをさらに短くを書き込むことができます。コメントで@Decent生噛じりが指し示すよう

$foo = isset($foo) ?: ''; 

これは、$fooからTRUEまたはFALSE(何isset()リターンに応じて)設定します。 isset()を削除すると、''に設定されますが、未定義の変数通知もスローされます(ただし、プロダクションではありません)。 PHP 7以来

あなたがnull合体演算子を使用することができます。これは、すべてのエラーをスローしませんが、速記三成分とは対照的に、$fooは、存在し、空であれば、それはTRUEとして評価します

$foo = $foo ?? ''; 

を変数が空の場合はFALSEと評価されます。

+1

正直な質問ですが、なぜあなたは '$ foo'を空の文字列とヌルにしたいでしょうか?私は環境を思いつくためにサークルに入っています –

+0

質問者は単にデフォルト値を設定したいと思います。この場合は空文字列です。そして、「!= NULLかどうかを設定しない;-) – powtac

+0

私は@MikeBと一緒にいます。私は8年後に回復するPHP開発者でした。これ、またはそれをやっていない問題があった? –

5

これは、変数の名前を配列に入れて、powtacの答えと同じように、3項演算子でループした場合です。他の回答で述べたように

$vars = array('foo', 'bar', 'ping', 'pong'); 
$defaultVar = ''; 

foreach($vars as $var) 
{ 
    $$var = isset($$var) ? $$var : $defaultVar; 
} 

は、バージョン5.3以降、PHPは次のよ​​うに上記のコードを記述することができます:

$vars = array('foo', 'bar', 'ping', 'pong'); 
$defaultVar = ''; 

foreach($vars as $var) 
{ 
    $$var = isset($$var) ?: $defaultVar; 
} 

は変わっ三項演算子に注意してください。

0

なぜ設定しないのですか?

<?php 
$foo = ''; 
$bar = ''; 
//etc 
?> 

値を保存しようとしている場合、一般的に正しい方法です。文の中に2番目の括弧は必要ないことに注意してください。

で十分です。

+0

問題の 'isset'のために、私はOPが変数にすでに値が設定されている可能性があることを示していると思います。 –

+2

あなたがちょうどそれを設定するつもりなら、私はします:$ foo = $ bar = $ ping = $ pong = ''; – pocketfullofcheese

+0

@pocketfullofcheese - なぜ私は(私が知っていることは正しい)答えとしてそれを追加しないでください? –

65
<?php 
    $foo = $bar = $ping = $pong = ''; 
?> 

それはあなたのスクリプトだとあなたは変数がbefor宣言されたかどうかを確認するためresoursesを過ごしたいなぜあなたは、どのあなたが使用する変数を知っていますか?

+11

また、何らかの理由でそれらを "宣言"したい場合は、 '$ foo;のように'; 'でそれらをすべて1行に置くことができます。 $ bar; $ far; $ boo; 'は、すべて1行に記述します。初期化されていない '$ foo、$ bar、$ far、$ boo; 'は、(構文解析)構文エラーをスローし、スクリプトを強制終了します。 –

+1

@JaredFarrish '$ foo; $ bar; $ far; $ boo; 'はまだスローしますNotice:未定義の変数:...' –

9

私は以前このコメントを投稿しましたが、誰かが回答として提出するように勧めました。

私は考えることができる最短と最も簡単な方法は、実行することです。

$foo = $bar = $ping = $pong = ''; 

あなたが将来的にチェックを常に行うことができるように、私は多くの場合、代わりに空の文字列で、falseに物事を設定することを好みます=== falseを使用していますが、これは単なる設定であり、これらの変数の使い方や何に依存します。

-3

$ a = ['foo'、 'bar'、 'ping'、 'pong']; foreach($ aとして$ v)$$ v = '';

//;)

0

お知らせ投げ

<?php 
    $foo = $bar = $ping = $pong = ''; 
    ?> 

の問題が解決するには:それは...

<?php 
    @$foo = $bar = $ping = $pong = ''; 
    ?> 

ます:未定義の変数をそれを修正しないでこれは表示されません。スクリプトが解析されることはありません。