2011-06-19 4 views
1

変数参照を使用するとエラーが発生します。私は明白な何かを欠いていますか事の必要なプロパティがtrueの場合PHP - 変数を参照として渡すと、不特定のエラーが発生する

基本的に...

$required = array(); 
$optional = array(); 

foreach($things as $thing){ 
    $list =& $thing->required ? $required : $optional; 
    $list[] = $thing; 
} 

は(物事のリストを通してルーピング、必要なもののリストにその事を渡し、他はオプションのもののリストにそれを渡します。あなたが必要か、異なる配列にオプションされているものを分離しようとしているよう...)

tyiaその様子から

+0

どういうところですか? – Pwnna

+0

@ultimatebuster - 500内部サーバーエラー - 他に何も指定されていません – momo

+0

サーバーログを使用する必要があります – Pwnna

答えて

1

、それはそうです。

<?php 

foreach ($things as $thing) 
{ 
    if ($thing->required) 
    $required[] = $thing; 
    else 
    $optional[] = $thing; 
} 

あなたは、単一の行でそれを行う上で主張する場合、あなたはこれを行うことができます:

<?php 

foreach ($things as $thing) 
    ${$thing->required ? 'required' : 'optional'}[] = $thing; 

あなたのコードに問題が$list =& $thing->required ? $required : $optional;です。 PHPは? $required : $optionalの部分を無視して$ this-> requiredを$listに割り当てています。次の配列に配列を追加しようとすると、$listはスカラーであり、もはや配列ではなくなり、失敗します。その問題を解決するために私が考えることができる唯一の方法は、上記の解決策の1つに進むか、参照によって配列を返す関数を作成することです。

リファレンスは:http://php.net/manual/en/language.operators.comparison.phpから:

三項演算子 は声明で、それは が変数に、しかし、文の 結果に評価されないことに注意してください。これは が重要であることを知りたい場合は を参考に変数を返します。 ステートメントは$ var == 42を返しますか? $ a:$ b;返される参照関数の は無効になるので、 は動作しません。警告は 以降のPHPバージョンで発行されます。

+0

はい、それは動作しますが、参照が失敗している理由を理解しようとしています参照が失敗しますか? – momo

+0

@ビッグモモ - あなたがしていることをすることはできません。私はそれを私の答えに加えます。 –

関連する問題