对象属性丢失

Object properties are lost

我正在尝试在 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();)加载[=25=没有问题] 文件,当我单独 运行 时 class 完美运行:这就是我单独测试它的方式:

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

请告诉我哪里做错了!

我认为你的问题来自这样一个事实,即你的 class GestionnaireDesTaches 需要一个字符串作为构造函数参数,但它得到一个 SimpleXmlElement.

类型的对象

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

这意味着 $boards['utilisateur'] 不是一个字符串,而是一个 SimpleXmlElement 对象,当您期望它表现得像一个字符串时,它(大多数时候)表现得像一个字符串。我不知道为什么在这段代码中它不能以这种方式工作,因为我不知道你如何在 GestionnaireDesTaches class.

中处理它

在将 $boards['utilisateur'] 传递给 class 的构造函数之前尝试将其转换为字符串 GestionnaireDesTaches:

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

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