dongqing5925 2012-12-05 21:08
浏览 80
已采纳

PHP从构造函数中调用类方法而不填充数组

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.

  • 写回答

1条回答 默认 最新

  • duanshang9426 2012-12-05 21:12
    关注

    Try renaming your constructor to __construct

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c