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 回答