Why does a var_dump return an empty array and an object?

0

It turns out that when I do var_dump of a variable that I receive from a webservice I receive this:

$ta = $this->GetServiceTA("ws_sr_padron_a4");
var_dump($ta->token);
  

array (0) {} object (SimpleXMLElement) # 10 (1) {[0] = > string (744)   "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI / Pgo8c3NvIHZlcnNpb249IjIuMCI + CiAgICA8aWQgc3JjPSJDTj13c2FhaG9tbywgTz1BRklQLCBDPUFSLCBTRVJJQUxOVU1CRVI9Q1VJVCAzMzY5MzQ1MDIzOSIgdW5pcXVlX2lkPSIzNzI1MTQzNjY5IiBnZW5fdGltZT0iMTUxMTQ0MTE2NyIgZXhwX3RpbWU9IjE1MTE0ODQ0MjciLz4KICAgIDxvcGVyYXRpb24gdHlwZT0ibG9naW4iIHZhbHVlPSJncmFudGVkIj4KICAgICAgICA8bG9naW4gZW50aXR5PSIzMzY5MzQ1MDIzOSIgc2VydmljZT0id3Nfc3JfcGFkcm9uX2E0IiB1aWQ9IlNFUklBTE5VTUJFUj1DVUlUIDIwMjM1NzIzOTA2LCBDTj1lbGVjdHJvbmljYSIgYXV0aG1ldGhvZD0iY21zIiByZWdtZXRob2Q9IjIyIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgICAgICAgICAgIDxyZWxhdGlvbiBrZXk9IjIwMjM1NzIzOTA2IiByZWx0eXBlPSI0Ii8 + CiAgICAgICAgICAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4 + CiAgICA8L29wZXJhdGlvbj4KPC9zc28 + Cg =="   }

How do I get the string for that result without more?

xml file from which I want to obtain the data:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loginTicketResponse version="1">
    <header>
        <source>CN=wsaahomo, O=AFIP, C=AR, SERIALNUMBER=CUIT 33693450239</source>

        <uniqueId>1024476891</uniqueId>
        <generationTime>2017-11-23T09:47:07.779-03:00</generationTime>
        <expirationTime>2017-11-23T21:47:07.779-03:00</expirationTime>
    </header>
    <credentials>
        <token>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8c3NvIHZlcnNpb249IjIuMCI+CiAgICA8aWQgc3JjPSJDTj13c2FhaG9tbywgTz1BRklQLCBDPUFSLCBTRVJJQUxOVU1CRVI9Q1VJVCAzMzY5MzQ1MDIzOSIgdW5pcXVlX2lkPSIzNzI1MTQzNjY5IiBnZW5fdGltZT0iMTUxMTQ0MTE2NyIgZXhwX3RpbWU9IjE1MTE0ODQ0MjciLz4KICAgIDxvcGVyYXRpb24gdHlwZT0ibG9naW4iIHZhbHVlPSJncmFudGVkIj4KICAgICAgICA8bG9naW4gZW50aXR5PSIzMzY5MzQ1MDIzOSIgc2VydmljZT0id3Nfc3JfcGFkcm9uX2E0IiB1aWQ9IlNFUklBTE5VTUJFUj1DVUlUIDIwMjM1NzIzOTA2LCBDTj1lbGVjdHJvbmljYSIgYXV0aG1ldGhvZD0iY21zIiByZWdtZXRob2Q9IjIyIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgICAgICAgICAgIDxyZWxhdGlvbiBrZXk9IjIwMjM1NzIzOTA2IiByZWx0eXBlPSI0Ii8+CiAgICAgICAgICAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4+CiAgICA8L29wZXJhdGlvbj4KPC9zc28+Cg==</token>
        <sign>DOfImTTBPSI8tlTMf6sWbfTXGj4VD4SK0Nc7Vv7FFP2poNk3ahTOGGf6yUhCkpJ7LmmcCr4s2UaeXJIikGwNhDvHvPkYnuF4iyKLhJqCmYnFyk7eSs2cIZ7U/hhIWbuwJTmrIW+Fbm1TgndF8zxeXvMNleHlzrzMbf90BO8xUlQ=</sign>
    </credentials>
</loginTicketResponse>
    
asked by Sebastian Montenegro 23.11.2017 в 22:18
source

1 answer

1

Objects of type SimpleXMLElement and their children do not behave properly as objects.

  

Note: SimpleXML has made a rule of adding iterative properties to most   methods They can not be viewed using var_dump () or anything else which   can examine objects.

In my case, I prefer to use libraries like Kint instead of var_dump just for that reason (and because Kint is very useful )

For your use case, the value of the token must be cast to string doing:

var_dump($TA->credentials->token->__toString());

Although you can also convert the SimpleXMLElement into an associative array and examine the nested keys.

Edit : At least according to your description of the problem, the following code would be equivalent

<?php

$string = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loginTicketResponse version="1">
    <header>
        <source>CN=wsaahomo, O=AFIP, C=AR, SERIALNUMBER=CUIT 33693450239</source>

        <uniqueId>1024476891</uniqueId>
        <generationTime>2017-11-23T09:47:07.779-03:00</generationTime>
        <expirationTime>2017-11-23T21:47:07.779-03:00</expirationTime>
    </header>
    <credentials>
        <token>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8c3NvIHZlcnNpb249IjIuMCI+CiAgICA8aWQgc3JjPSJDTj13c2FhaG9tbywgTz1BRklQLCBDPUFSLCBTRVJJQUxOVU1CRVI9Q1VJVCAzMzY5MzQ1MDIzOSIgdW5pcXVlX2lkPSIzNzI1MTQzNjY5IiBnZW5fdGltZT0iMTUxMTQ0MTE2NyIgZXhwX3RpbWU9IjE1MTE0ODQ0MjciLz4KICAgIDxvcGVyYXRpb24gdHlwZT0ibG9naW4iIHZhbHVlPSJncmFudGVkIj4KICAgICAgICA8bG9naW4gZW50aXR5PSIzMzY5MzQ1MDIzOSIgc2VydmljZT0id3Nfc3JfcGFkcm9uX2E0IiB1aWQ9IlNFUklBTE5VTUJFUj1DVUlUIDIwMjM1NzIzOTA2LCBDTj1lbGVjdHJvbmljYSIgYXV0aG1ldGhvZD0iY21zIiByZWdtZXRob2Q9IjIyIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgICAgICAgICAgIDxyZWxhdGlvbiBrZXk9IjIwMjM1NzIzOTA2IiByZWx0eXBlPSI0Ii8+CiAgICAgICAgICAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4+CiAgICA8L29wZXJhdGlvbj4KPC9zc28+Cg==</token>
        <sign>DOfImTTBPSI8tlTMf6sWbfTXGj4VD4SK0Nc7Vv7FFP2poNk3ahTOGGf6yUhCkpJ7LmmcCr4s2UaeXJIikGwNhDvHvPkYnuF4iyKLhJqCmYnFyk7eSs2cIZ7U/hhIWbuwJTmrIW+Fbm1TgndF8zxeXvMNleHlzrzMbf90BO8xUlQ=</sign>
    </credentials>
</loginTicketResponse>';

$xml = new SimpleXMLElement($string);

// $xml = simplexml_load_string($string); Esto es equivalente


var_dump($xml->credentials->token->__toString());

And this throws me

  

string (744)   "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI / Pgo8c3NvIHZlcnNpb249IjIuMCI + CiAgICA8aWQgc3JjPSJDTj13c2FhaG9tbywgTz1BRklQLCBDPUFSLCBTRVJJQUxOVU1CRVI9Q1VJVCAzMzY5MzQ1MDIzOSIgdW5pcXVlX2lkPSIzNzI1MTQzNjY5IiBnZW5fdGltZT0iMTUxMTQ0MTE2NyIgZXhwX3RpbWU9IjE1MTE0ODQ0MjciLz4KICAgIDxvcGVyYXRpb24gdHlwZT0ibG9naW4iIHZhbHVlPSJncmFudGVkIj4KICAgICAgICA8bG9naW4gZW50aXR5PSIzMzY5MzQ1MDIzOSIgc2VydmljZT0id3Nfc3JfcGFkcm9uX2E0IiB1aWQ9IlNFUklBTE5VTUJFUj1DVUlUIDIwMjM1NzIzOTA2LCBDTj1lbGVjdHJvbmljYSIgYXV0aG1ldGhvZD0iY21zIiByZWdtZXRob2Q9IjIyIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgICAgICAgICAgIDxyZWxhdGlvbiBrZXk9IjIwMjM1NzIzOTA2IiByZWx0eXBlPSI0Ii8 + CiAgICAgICAgICAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4 + CiAgICA8L29wZXJhdGlvbj4KPC9zc28 + Cg =="

So if your code behaves differently there is something different in the input with which you generate the SimpleXMLElement. Any extra content in the file? Maybe blank spaces?

    
answered by 23.11.2017 в 23:15