コンストラクター内からクラスのメソッドを呼び出すと、結果として空の配列が得られるという非常に奇妙な問題がありますが、クラスインスタンスからメソッドを呼び出すと、正常に機能します。
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);
}
}
}
次のように電話をかけると、メインファイルに次のようになります。
include('loadxml.php');
$nodes = new LoadXML('myXMLFile.xml');
print "<pre>";
print_r($nodes);
print "</pre>";
...結果は次のようになります。
LoadXMLオブジェクト([MyNodes] =>配列())
このようにクラスインスタンスから呼び出しを行い、LoadXMLコンストラクターからgetNodesへの呼び出しをコメントアウトすると、次のようになります。
include('loadxml.php');
$nodes = new LoadXML();
$nodes->getNodes('myXMLFile.xml');
print "<pre>";
print_r($nodes);
print "</pre>";
正しい出力が得られます。何が起こっていますか?最初のアプローチで何が間違っているのですか?クラスコンストラクターから何かが足りませんか?マニュアル(http://php.net/manual/en/oop4.newref.php)を調べたところ、コンストラクター内からのメソッドの呼び出しは正当なようです。