sage icon indicating copy to clipboard operation
sage copied to clipboard

DOM functions show no dumped data

Open tfedor opened this issue 3 years ago • 6 comments

Trying to use sage when debugging DOM manipulation with https://www.php.net/manual/en/book.dom.php functions, dump shows no real info.

DOMNodeList

print_r output:

DOMNodeList Object
(
    [length] => 1
)

sage output (omitted header with variable name and trace string):

DOMNodeList (0)

DOMElement

print_r output:

DOMElement Object
(
    [tagName] => span
    [schemaTypeInfo] =>
    [nodeName] => span
    [nodeValue] => This item is currently unavailable in your region
    [nodeType] => 1
    [parentNode] => (object value omitted)
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => (object value omitted)
    [nextSibling] => (object value omitted)
    [attributes] => (object value omitted)
    [ownerDocument] => (object value omitted)
    [namespaceURI] =>
    [prefix] =>
    [localName] => span
    [baseURI] =>
    [textContent] => This item is currently unavailable in your region
)

sage output (omitted header with variable name and trace string):

DOMElement (0)

tfedor avatar Jun 03 '22 00:06 tfedor

I'm humbled to receive the first issue on this new branch of Sage - thank you!

Can you please provide me with the object you're dumping - is it something like

d(
    new DOMElement('<span>This item is currently unavailable in your region')
);

?

raveren avatar Jun 03 '22 05:06 raveren

Basically like that, here's a minimal example with DOMNode, DOMNodeList and DOMAttr, but I think basically any object like that will do the same thing. It seems to me, that sage won't print public properties from these objects.


$dom = new DOMDocument();
$dom->loadHTML(<<<HTML
<html>
    <body>
        <div>
            <p id="id1">first span</p>
            <p id="id2" title="Fancy span">second span</p>
            <p id="id3">third span</p>        
        </div>
    </body>
</html>
HTML);

$xpath = new DOMXPath($dom);

$div = $xpath->query("//div")->item(0);
sage($div);
print_r($div);

$pNodeList = $xpath->query("//p");
sage($pNodeList);
print_r($pNodeList);

$attr = $xpath->query("//*[@id='id2']/@title");
sage($attr->item(0));
print_r($attr->item(0));

I didn't really dug deep into how sage works, but I saw you have different parsers - maybe it would be enough to fall back to parser that you use for basic objects, because when I tried this, it worked as expected:

$o = new class {
    public $a1 = 1;
    public $a2 = 2;
    public $a3 = 3;
};

sage($o);
print_r($o);

tfedor avatar Jun 03 '22 08:06 tfedor

I am sorry for the delay in solving this, I had some computer trouble, my new one is arriving shortly, I'll fix this ASAP :)

raveren avatar Jun 13 '22 09:06 raveren

Hey, so sorry for the delay, life was not eeasy :) I tried it out on php8.1 and everything outputs huge amounts of data:

image

can you tell me, what PHP version are you on?

(note that there is a minor visual bug - the "* RECURSION *" in some top rows with children - I'll investigate it, most probably PHP-version related)

raveren avatar Jul 22 '22 13:07 raveren

closing it, I couldn't reproduce it sorry

raveren avatar Nov 29 '22 14:11 raveren

Yeah, there's definitely something still wrong there, but I have to find time and motivation, I think I am going to work with an xml API soon...

raveren avatar Jun 21 '23 11:06 raveren