60

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

エラー表示をオフにする唯一の理由は、isset() のおかげで、使用する前にすべての変数をテストする必要がないようにするためです。

だから、ここに私の質問があります:

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

<?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;
?>
4

7 に答える 7

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

それがあなたのスクリプトであり、使用する変数がわかっている場合、変数が以前に宣言されたかどうかを確認するためにリソースを費やす必要があるのはなぜですか?

于 2012-06-14T00:39:51.173 に答える
12

これを以前にコメントに投稿しましたが、誰かが回答として送信することを提案しました。

私が考えることができる最も短くて簡単な方法は、次のことです。

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

空文字列の代わりに false に設定することを好むことがよくあります。これにより、将来 === false を使用して常にチェックを行うことができますが、これは単なる好みであり、これらの変数をどのように使用しているか、何のために使用しているかによって異なります。

于 2012-06-15T01:51:50.557 に答える
8

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

ただし、三項演算子を使用して、もう少し短く/読みやすく書くことができます。

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

最初$fooの値は、?の後の条件=が true の場合の後の値に設定されます。それ以外の場合は、 の後の値に設定されます:。条件 (=との間?) は常にブール値としてキャストされます。

PHP 5.3 以降では、さらに短く書くことができます

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

コメントで@Decent Dabblerが指摘しているように、これはまたは(返されるものに応じて)に設定$fooされます。削除すると設定されますが、未定義の変数通知もスローされます(ただし、本番環境ではありません)。TRUEFALSEisset()isset()''

PHP 7 以降では、null 合体演算子を使用できます。

$foo = $foo ?? '';

これはエラーをスローしませんが、変数が空であるかのように評価する省略形の三項演算子とは対照的に、存在して空であるTRUEかのように評価します。$fooFALSE

于 2012-06-14T00:32:20.053 に答える
5

powtacこれを行うややラウンドアバウトな方法は、変数の名前を配列に入れてから、の答えと同様に三項演算子でそれらをループする場合です。

$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;
}

変更された三項演算子に注意してください。

于 2012-06-14T00:34:02.657 に答える
0

それらを設定しないのはなぜですか?

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

それらの値を保持しようとしている場合、はい、それは一般的に正しい方法です。ステートメントに 2 番目の括弧のペアは必要ないことに注意してください。

if (!isset($foo)) $foo = '';

で十分です。

于 2012-06-14T00:34:23.397 に答える