2012-03-26 17 views
1

配列の構築プロセスで、関数を呼び出そうとしています。checkIfNodeExists()。 PHPはこの関数を実行して、期待通りの結果を得ていますが、彼はまだ私に "通知"を与えています。配列の呼び出し関数(PHP)

function checkIfNodeExists($input) { 
    if (isset($input)) { 
     return (string) $input; 
    } else { 
     return 'null'; 
    } 
} 

$array['sections'][] = array (
    'ident'  => $section->attributes()->ident, 
    'title'  => $section->attributes()->title, 
    'objective' => checkIfNodeExists($section->objectives->material->mattext) 
); 

お知らせ:私はチェックすると、「目的は」OUTSIDE存在する場合は、

今ラインXX上/var/www/OLAT_Connection/QTI-XML-Parser.phpで非オブジェクトのプロパティを取得しようとすると、配列、PHPは私に通知を与えません。しかし、これは、余分なコードや余分なIF構造などを扱わなければならないので、より多くのコード行を生成します...

余分なコードを追加することなく他の可能性はありますか?

+0

$セクション - > objectives->材料 - > mattextが適切に開始され、定義されていることを確認してください。より多くのコードが必ずしも悪くはないことに注意してください! –

+0

checkIfNodeExistsを呼び出す前にissetで確認する必要があります。 – Fivell

答えて

1

$section->objectives->material->mattextではないようです適切に定義される。私はあなたがオブジェクトの初期化にエラーがあるかどうかを調べるためにそこから探し始めます。

もっとコードを投稿した方が、このスクリプトで何が起こっているのかがわかります。

解決策では(この場合はありませんが)より多くのコードが必要な場合がありますが、これは決して悪いことではありません。コードが少なくても必ずしも効率的ではありません。もちろんそれは、少ないコード行が(ほとんどの時間)より速く実行されますが、これはそれより安全や効率的な

UPDATE

をしないあなたは、単にこれを行うことができるかもしれませんことは言うまでもないです代わりに、別の関数呼び出しの:

'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : null 

を私はこれをテストしていない、あなたは条件文をインラインで配置することができるかどうかを思い出すことができないので、それが動作するかどうかを確認することはできませんが、それがない場合、これは、より効率的になり、そしてそれ少ないコードです!

+1

よくハレルヤ、条件付きの作品。しかし、より多くのコードが必ずしも悪いとは限りません。ありがとう! –

+0

うれしい私は、楽しむことができる! :-) –

0

あなたが追加した場合、 "@" 関数を呼び出すときにエラーが

function checkIfNodeExists($input) { 
    if (isset($input)) { 
     return (string) $input; 
    } else { 
     return 'null'; 
    } 
} 

$array['sections'][] = array (
    'ident'  => $section->attributes()->ident, 
    'title'  => $section->attributes()->title, 
    'objective' => @checkIfNodeExists($section->objectives->material->mattext) 
); 
+2

はい、これでエラーが抑止されます。この機能は彼が望んでいることをしていないので、これはそれをソートしません! –

0

が定義表示されていません$セクション - > objectives->材料 - > mattext

2

checkIfNodeExistsを呼び出すと値が送信され、値を送信すると値も実行されるという問題があります。したがって、isset()は、の結果、の表現$section->objectives->material->mattextおよびの表現自体はではありません。

これは動作します:

$array['sections'][] = array (
    'ident'  => $section->attributes()->ident, 
    'title'  => $section->attributes()->title, 
    'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : 'null' 
); 
関連する問題