SimpleXML を使用しています。関数へのユーザー入力が無効な場合、変数$x
は空の SimpleXMLElement オブジェクトです。それ以外の場合は、入力済みのプロパティがあります$x->Station
。存在するかどうかを確認したいStation
。
private function parse_weather_xml() {
$x = $this->weather_xml;
if(!isset($x->Station)) {
return FALSE;
}
...
}
これは、エラーを返すことを除いて、私が望むことを行います:
警告: WeatherData::parse_weather_xml(): ノードが WeatherData->parse_weather_xml() に存在しなくなりました (vvdtn.inc の 183 行目)。
よし、isset()
アウトだ。これを試してみましょう:
private function parse_weather_xml() {
$x = $this->weather_xml;
if(!property_exists($x, 'Station')) {
return FALSE;
}
...
}
これはほとんど同じように動作します:
警告: property_exists(): ノードは WeatherData->parse_weather_xml() に存在しなくなりました (vvdtn.inc の 183 行目)
よし、よし、例外にして無視しよう。私はこれまでにこれを行ったことがなく、正しく行っているかどうかもわかりませんが、試してみます:
function crazy_error($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
...
private function parse_weather_xml() {
set_error_handler('crazy_error');
$x = $this->weather_xml;
if(!property_exists($x, 'Station')) {
return FALSE;
}
restore_error_handler();
...
}
独自の HTML ページを返します。
例外の処理中に追加のキャッチされない例外がスローされました。
オリジナル
ErrorException: property_exists(): ノードが crazy_error() に存在しなくなりました (vvdtn.inc の 183 行目)。
追加
ErrorException: stat(): crazy_error() の /sites/default/files/less/512d40532e2976.99442935 の統計に失敗しました (/includes/stream_wrappers.inc の 689 行目)。
だから今、私はヒステリックに笑ってあきらめています。何らかの形でこのエラーを取得することなく、SimpleXML オブジェクトのプロパティの存在を確認するにはどうすればよいですか?