对象属性丢失

时间:2015-02-15 19:45:56

标签: php oop

我试图在我点击网站上的按钮后调用的php脚本中使用对象GestionnaireDesTaches。 这就是我调用脚本的方式:

$(document).on( "click", "#addWidgetButton", function(e) {
                 e.preventDefault(); 
                 gridster[0].add_widget.apply(gridster[0], ['<li data-row="1" data-col="2" data-sizex="1" data-sizey="1" class="gs-w"><header><p style="cursor: move;">|||</p><div class="dragDiv">New</div></header></li>', 1, 1]); 
                 $.ajax({
                    type: "POST",
                    url: 'trait.php',
                    data: { action : action , board : board  },
                    success: function(data)
                    {
                        alert("Project created!");
                    }
                });
            });

这工作正常,但我的脚本有问题:

    <?php
        require_once('GestionnaireDesTaches.php');
        require_once('Board.php');
        require_once('Projet.php');
        require_once('Tache.php');

        $boards = simplexml_load_file('gtxml.xml');
        $gestionnaireDesTaches = new GestionnaireDesTaches($boards['utilisateur']);

        ?> <p> <?php echo "hh".$gestionnaireDesTaches->getUtilisateur();?></p><?php   
        ?> <p> <?php echo "hh".$boards['utilisateur'];?></p>

第一个回声没有给我任何东西,第二个回显给我的是Utilisateur,它就像第二次调用时对象失去了它的属性($gestionnaireDesTaches->getUtilisateur();)加载xml文件没有问题,当我独自运行时,这个课程完美无缺:这是我如何单独测试的:

$gt = new GestionnaireDesTaches("Othman");
echo $gt->getUtilisateur();  \\ I get my name with this

请告诉我我做错了什么!

1 个答案:

答案 0 :(得分:1)

我认为您的问题来自于您的类GestionnaireDesTaches期望字符串作为构造函数参数但它获得类型为SimpleXmlElement的对象。

函数simplexml_load_file()返回类型为SimpleXmlElement的对象,它是包含XML对象的PHP资源的包装器。提供对存储在XML对象中的信息的访问的SimpleXmlElement的所有方法都返回SimpleXmlElement个对象。

这意味着$boards['utilisateur']不是一个字符串,而是一个SimpleXmlElement对象,当你期望它表现得像一个字符串时,它(大多数情况下)的行为就像一个字符串。我不知道为什么它在这段代码中没有这种方式,因为我不知道你如何在GestionnaireDesTaches类中处理它。

尝试将$boards['utilisateur']转换为字符串,然后再将其传递给类GestionnaireDesTaches的构造函数:

$gestionnaireDesTaches = new GestionnaireDesTaches(
    (string)$boards['utilisateur']
);

$gestionnaireDesTaches = new GestionnaireDesTaches(
    $boards['utilisateur']->__toString()
);