PHP类私有变量的值被误导

PHP Class private variable misdirected value

本文关键字:变量 PHP      更新时间:2023-09-26

首先,我的问题来自于我的php类,该类由AJAX调用访问的php文件调用。

问题是返回值完全错误,并且与sybase_result值不同。那么我错过了什么?

以下是我的程序步骤。

首先我们进行AJAX调用:

$.ajax(
{
    type: "POST",
    url: "ajax/load_fiche_resume.php",
    timeout:5000,
    dataType: 'json',
    data: ({matricule:matricule, id_mun:id_mun}),
    beforeSend: function()
    {
        // Handle the beforeSend event
        $('#loading-bar').show("slow");
    },
    complete: function()
    {
        // Handle the complete event
        $('#loading-bar').hide("slow");
    },
    success: function(data)
    {
        console.dir(data);
        $('#tab-role').html(formatData(data));
    },
    error: function () 
    {
        alert("Oops! Une erreur c'est produite.'nVeuiller rafraichir la page. 'nSi cela se reproduit, veuiller contacter le propriétaire du site.");
    }
});

然后,我们进入php文件load_fiche_sume.php

include('../class/class_role.php');
$oRole = new Role("42025", "2036-94-5034");

$ar_step2 = array(
                array("Propriétaire(s)"),
                array("Nom(s) : ", $oRole->getProprioNoms() ),
                array("Adresse postale : ", $oRole->getProprioAdresse() ),
                array("Condition particulière d'inscription : ", $oRole->getProprioCondition() ),
                array("Date d'inscription au rôle : ", $oRole->getProprioDateInscription() )
            );

如果我们仔细查看上面的代码,函数$oRole->getProprioDateInscription()的返回值应该是一个日期。但是,这个函数返回的不是日期,而是另一个get函数的字符串(即:它将显示$oRole->getProprioNoms的值),这是完全错误的。

如果我们进入类$oRole,我们有这个:

class Role
{
    private $prop_inscription;
    public function getInfoProprio()
    {
        $qry = "SELECT 
                    p.nom_form AS nom_form,
                    p.t_typos AS t_typos,
                    substr(p.d_date_inscr,1,10) AS d_date_inscr,
                    pga.adr_form AS adr_form,
                    p.id_adr AS id_adr,
                    p.id AS id
                FROM 
                    ev_dossiers d,
                    ro_b75 p,
                    pg_adresses pga
                WHERE 
                    d.id_dossiers = ".$this->getIdDossier()." AND
                    d.typ_donnees = 11 AND
                    d.id_donnees = p.id AND
                    p.id_adr = pga.id_adr order by p.id, p.id_adr, p.ordre;";
        $this->prop_qry = $qry;
        $result = sybase_query($qry, $this->getLinkDB());
        $nbr = sybase_num_rows($result);
        $typos = sybase_result($result, 0, "t_typos");
        if($nbr>0)
        {
            for($cpt=0; $cpt<$nbr; $cpt++)
            {
                if($cpt===0)
                {
                    $this->setProprioNoms(utf8_encode(strtr(trim(sybase_result($result, $cpt, "nom_form")),"’","'")));
                    $this->setProprioAdresse(utf8_encode(strtr(trim(sybase_result($result, $cpt, "adr_form")),"’","'")));
                    $this->setProprioCondition($this->getConditionInscription(sybase_result($result, $cpt, "t_typos")));
// THIS IS PROBLEMATIC                       
$this->setProprioDateInscription(sybase_result($result, 0, "d_date_inscr"));
                }
                else 
                {
                    $this->setProprioNoms(", ".utf8_encode(strtr(trim(sybase_result($result, $cpt, "nom_form")),"’","'")));
                }
            }
        }
    }   
    ...
        public function getProprioDateInscription()
    {
        return $this->prop_inscription;
    }
    private function setProprioDateInscription($date)
    {
        $this->prop_inscription = $date;
    }
}

如果我们看一下下面的行:$this->setProprioDateInscription(sybase_result($result,0,"d_date_inscr");

sybase_result返回一个日期(从数据库中看一切正常,值很好)。但是问题出在私有var prop_inscription的Setter和Getter之间。

你能帮我吗?你知道问题出在哪里吗?

非常感谢。

要解决此问题,

只要换一下这条线

// THIS IS PROBLEMATIC                       
$this->setProprioDateInscription(sybase_result($result, 0, "d_date_inscr"));

$this->setProprioDateInscription(utf8_encode(strtr(trim(sybase_result($result, $cpt,"d_date_inscr")),"’","'")));