0

現在のオブジェクトを検査するためにコードをデバッグしています。

これは、次のような xml からの SimpleXml ロードです。

<?xml version="1.0" encoding="UTF-8"?><epreuves><epreuve id="467" noteSur="20"><![CDATA[Civil Engineering China 2012]]></epreuve></epreuves>

このコードを使用してオブジェクトをロードしています。

$result=simplexml_load_string($xml_string,null,LIBXML_NOCDATA);

コードをデバッグすると、次のように表示されます。

ここに画像の説明を入力

オブジェクトを文字列に変換すると、必要なデータが得られますが、オブジェクトの中身のどこかに "Civil Engineering China 2012" が表示されないのはなぜですか?

4

1 に答える 1

1

要するに、@Gordon は非常に正しいです。SimpleXMLElementクラスにはいくつかの非常に珍しいプロパティがあるため、そのオブジェクトが「通常の」オブジェクトと同じようにデバッガーで明らかになると期待するのは賢明ではありません。

とはいえ、もう少し分析してみましょう。単純な検索lxr.php.net(私は PHP 5.3 ブランチを使用しました。率直に言って、これが 5.4 でも異なるとは思わないため) は、最終的に次の構造につながります。

typedef struct {
    zend_object zo;
    php_libxml_node_ptr *node;
    php_libxml_ref_obj *document;
    HashTable *properties;
    xmlXPathContextPtr xpath;
    struct {
        xmlChar               *name;
        xmlChar               *nsprefix;
        int                   isprefix;
        SXE_ITER              type;
        zval                  *data;
    } iter;
    zval *tmp;
    zend_function *fptr_count;
} php_sxe_object;

ここには注目すべき点がいくつかあります。質問のコンテキストで重要なのは、「通常の」オブジェクト自体 (ここで定義されているような) はこの構造の一部にすぎないということです。

于 2012-11-07T11:11:27.607 に答える