I have a very weird problem that when I call the method of a class from within the constructor I get as a result empty arrays, but when I call the method from the class instance it works fine.
Here is the code for loadxml.php:
include('XMLNode.php'); // this is a simple object class
class LoadXML
{
public $MyNodes = array();
public function __constructor($xmlFile)
{
$this->getNodes($xmlFile);
}
public function getNodes($xmlFile)
{
if (file_exists($xmlFile)) {
$xmlNodes = simplexml_load_file($xmlFile);
foreach ($xmlNodes->XMLNode as $key => $value) {
array_push($this->MyNodes, $value);
}
}
else
{
exit('Failed to open xml file '.$xmlFile);
}
}
}
Now in the main file if I make the call like this:
include('loadxml.php');
$nodes = new LoadXML('myXMLFile.xml');
print "<pre>";
print_r($nodes);
print "</pre>";
... the result looks like this:
LoadXML Object ( [MyNodes] => Array ( ) )
If I make the call from the class instance like this and comment out the call to getNodes from the LoadXML constructor:
include('loadxml.php');
$nodes = new LoadXML();
$nodes->getNodes('myXMLFile.xml');
print "<pre>";
print_r($nodes);
print "</pre>";
I will get the correct output. What's happening? What am I doing wrong in the first approach? Am I missing something from the class constructor? I looked in the manual (http://php.net/manual/en/oop4.newref.php) and the call to the method seems legit from within the constructor.