1

別のメソッドから配列をフェッチし、その配列の最初の要素を返すことがある、非常に広範囲に使用されるコードがあります。これが関数nullの許容可能な戻り値であるとするとisset()、配列インデックスを呼び出す(または配列の長さをチェックするなど)パフォーマンスのオーバーヘッドに見合うだけの価値があるのでしょうか、それとも存在しないインデックスを返すだけの方がよいのでしょうか(警告は別として)。isset()警告を防ぐ以外に電話をかけることの利点は何ですか。

以下の例は単純化されており、実際の関数は配列の最初の要素を取得するだけではありません。

存在しない可能性のあるリターンインデックス:

function get_array_element(){
    $array = get_array();       // function that returns array
    return $array[0];           // return index 0 which may not exist
}

インデックスが設定されているかどうかの確認との比較:

function get_array_element(){
    $array = get_array();       // function that returns array
    return (isset($array[0]))?  // check if index 0 isset() else return null
        $array[0] : 
        null; 
}
4

2 に答える 2

2

未定義のインデックスにアクセスするときに通知をスローすると(理論的には)、キー名のタイプミスについて警告する必要があります。実際には、isset最初に使用している場合は、おそらくそこにキー名をコピーしただけです。または数値インデックスを使用しました。または定数。

一方、ほとんどの場合、インデックスが設定されているかどうかに関係なく、インデックスにアクセスしています。このシナリオでは、使用するのissetは面倒です。多くの言語では、警告なしでインデックスを取得できます。たとえば、Javascriptでは。を返すだけundefinedです。

したがって、通知を無視することをお勧めします。すべてではありません。場合によっては本当に役立つことがあるので、開発中はオンのままにしておきますが、を使用してそのようなアレイアクセスを無音にし@ます。はい、それは醜いですが、その仕事をします:

return @$array[0];

または、単純なケースでは、他のソリューションが適している可能性がありますか?

return array_shift($array);
于 2012-11-01T21:26:12.163 に答える
-1

その関数内でissetを呼び出すことは、存在しない場合はnullを返すため、半無意味ですが、isset of notを使用するかどうかに関係なく、$array[0]からnullが返されます。

E_NOTICEのみ​​をスローする場合は、心配する必要はありません。get_array_element()==nullを確認するだけです。

于 2012-11-01T21:10:12.523 に答える