PHP从构造函数调用类方法而不是填充数组
我有一个非常奇怪的问题,当我从构造函数中调用一个类的方法时,我得到的结果是空数组,但当我从类实例调用该方法时,它工作正常 以下是loadxml.php的代码:PHP从构造函数调用类方法而不是填充数组,php,Php,我有一个非常奇怪的问题,当我从构造函数中调用一个类的方法时,我得到的结果是空数组,但当我从类实例调用该方法时,它工作正常 以下是loadxml.php的代码: include('XMLNode.php'); // this is a simple object class class LoadXML { public $MyNodes = array(); public function __constructor($xmlFile) { $this->getNodes($xm
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>";
include('loadxml.php');
$nodes=newloadxml('myXMLFile.xml');
打印“”;
打印(节点);
打印“”;
。。。结果如下所示:
include('loadxml.php');
$nodes = new LoadXML('myXMLFile.xml');
print "<pre>";
print_r($nodes);
print "</pre>";
LoadXML对象
(
[MyNodes]=>数组
(
)
)
如果我像这样从类实例进行调用,并从LoadXML构造函数中注释掉对getNodes的调用:
include('loadxml.php');
$nodes=newloadxml();
$nodes->getNodes('myXMLFile.xml');
打印“”;
打印(节点);
打印“”;
我将获得正确的输出。发生了什么事?在第一种方法中,我做错了什么?我是否缺少类构造函数中的某些内容?我查看了手册(),对该方法的调用似乎在构造函数中是合法的。尝试将构造函数重命名为
\uuu-construct
尝试将构造函数重命名为\uu-construct
我实际上是想弄清楚,当您调用new LoadXML()
时,脚本为什么不退出。您尚未传递参数,但仍在构造函数中调用getNodes()
。在这种情况下,file\u exists()
将计算为false,导致退出。这里显示的代码是否准确地反映了整个类结构和正在执行的测试?@MikeBrant他的构造函数从未被调用。他必须将其重命名为\u construct
,才能在第二个示例中正确描述您的行为。@Benjamin Haha。我把时间花在了逻辑上,实际上我没有看方法的名称。哈哈!那些简单的事情会让我丧命……:)谢谢你,本杰明!我实际上是想弄明白,当您调用newloadxml()
时,脚本为什么不退出。您尚未传递参数,但仍在构造函数中调用getNodes()
。在这种情况下,file\u exists()
将计算为false,导致退出。这里显示的代码是否准确地反映了整个类结构和正在执行的测试?@MikeBrant他的构造函数从未被调用。他必须将其重命名为\u construct
,才能在第二个示例中正确描述您的行为。@Benjamin Haha。我把时间花在了逻辑上,实际上我没有看方法的名称。哈哈!那些简单的事情会让我丧命……:)谢谢你,本杰明!谢谢你,先生!妈的,我从没想到过。我本以为php会给我一个错误或什么的。。。非常感谢您的快速回复!:)谢谢你,先生!妈的,我从没想到过。我本以为php会给我一个错误或什么的。。。非常感谢您的快速回复!:)