2

次のコードを使用して、XMLファイルからRSSフィードの詳細をいくつか読み取ろうとしています。

$this->feedFile = file_get_contents(__ROOT__ . '/assets/feedList.xml'); //Define this externally
$this->feedDetailsArray = array();
$this->feedXML = new SimpleXMLElement($this->feedFile);
echo "1. =========";
print_r($this->feedXML);
echo "1. =========";
foreach($this->feedXML->Feed as $feedItem) {
    echo "2. =========";
    echo "AJ:: feedName " . var_dump($feedItem->FeedName) . " feedURL " . var_dump($feedItem->FeedURL) . "\n";
    echo "2. =========";
    $feedDetails = array(
        "feedName" => $feedItem->FeedName,
        "feedURL" => $feedItem->FeedURL/*,
        'favIconURL' => $feedItem->FavIconURL
        );
    echo "3. =========";
    var_dump($feedDetails);
    echo "3. =========";

print_rは以下を出力します。

1. =========SimpleXMLElement Object
(
    [Feed] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [FeedName] => Hacker News
                    [FeedURL] => http://news.ycombinator.com/rss
                    [FavIconURL] => http://ycombinator.com/favicon.ico
                    [Segment] => Startups
                )

    .
    .
    .

最初のvar_dump(echo "feedName " . var_dump($feedItem->FeedName) . " feedURL " . var_dump($feedItem->FeedURL) . "\n";)出力:

2. =========class SimpleXMLElement#38 (1) {
    string(11) "Hacker News"
}
class SimpleXMLElement#38 (1) {
    string(31) "http://news.ycombinator.com/rss"
}
AJ:: feedName  feedURL 
2. =========

そして、2番目のvar_dump出力:

3. =========array(2) {
  'feedName' =>
  class SimpleXMLElement#38 (1) {
        string(11) "Hacker News"
  }
  'feedURL' =>
  class SimpleXMLElement#37 (1) {
        string(31) "http://news.ycombinator.com/rss"
  }
}
3. =========

私の質問は、ステートメントの"feedName" => $feedItem->FeedName結果、SimpleXMLオブジェクトの値ではなくオブジェクトが割り当てられるのはなぜですか?オブジェクトではなく、値のみが必要です。誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

3

SimpleXMLは、オブジェクトに__toString()マジックメソッドを実装します。それ以外の場合は、オブジェクト参照によって割り当てられます。それらがechoed文字列のコンテキストで使用される場合(一例として)、文字列値が返されますが、通常の代入または参照では、SimpleXMLElementオブジェクト全体が取得されます。

文字列値が必要な場合は、文字列にキャストできます。

$feedDetails = array(
    "feedName" => (string)$feedItem->FeedName,
    "feedURL" => (string)$feedItem->FeedURL
 );
于 2012-10-19T12:52:05.093 に答える