【问题标题】:my variable has 2 types我的变量有 2 种类型
【发布时间】:2016-03-01 12:17:18
【问题描述】:

我需要您的帮助,因为我遇到了一个不常见的问题: 在我的代码中,我有一个第一个函数,在该函数中我使用 PDO 进行请求,它返回一个数组,结果是一个名为“result”的变量。 当我对这个变量执行 var_dump() 时,它会告诉我:

array(4) { ["id_offre_var"]=> string(4) "7061" ["id_offre"]=> string(4) "3216" ["prix"]=> string(5) "29.90" ["prix_public"]=> string(5) "69.00" }

所以,我有一个数组,没关系。

然后,我调用了一个名为 hydrate() 的函数,我将变量“result”放入其中。但是,在这个函数中,当我对这个参数(我之前的变量“result”)执行 var_dump() 时,它告诉我:

array(4) { ["id_offre_var"]=> string(4) "7061" ["id_offre"]=> string(4) "3216" ["prix"]=> string(5) "29.90" ["prix_public"]=> string(5) "69.00" } bool(false)

我的变量现在是一个数组和一个布尔值! 显然,这给我带来了下一个问题。

我的第一个功能:

public function getVarianteForNewsletter($idOffre)
{
    $sql = "SELECT id_offre_var, id_offre, prix, prix_public FROM apm_offres_variante
          WHERE id_offre = :offre
          ORDER BY prix
          LIMIT 0,1";
    $stmt = $this->_dal->prepare($sql);
    $stmt->bindValue(":offre", $idOffre, PDO::PARAM_INT);
    $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    var_dump($result);
    $Object = new OffreVariante();
    $this->hydrate($Object, $result);
    return $Object;
}

然后,我的函数 hydrate():

protected function hydrate($Object, $params)
{
    var_dump($params);
    foreach ($params as $key=>$param)
    {
        $var = array_search($key, $this->_varsColsName);
        if ($var != false)
        {
            //if $var is a foreign key to another object
            if (array_key_exists($var, $this->_foreignKeys))
            {
                $fk = $this->_foreignKeys[$var];
                $daoName = "DAO".ucfirst($fk);
                $dao = new $daoName($this->_dal);
                $param = $dao->getById($param);
            }

            $setter = "set".ucfirst($var);
            $Object->$setter($param);
        }
    }
}

【问题讨论】:

  • 您好,纪尧姆先生。如果您分享第一种方法和hydrate() 方法中的相关代码,将会很有帮助。
  • 你可能看到两个不同的var_dump's
  • 这不可能。可能您正在运行另一个代码。向我们展示整个事情。
  • 你的方法getVarianteForNewsletter在扩展OffreVariante的类中吗?
  • 是的,这不是真的,但不,它不会运行其他代码。而且,为了测试,在我的函数 hydrate() 中,我将参数“params”重命名为“paramsarray”,这样它就可以正常工作。问题仅在于参数被称为“参数”时;)

标签: php arrays parameters boolean


【解决方案1】:

最后,问题是由 foreach() 中的 $key=>$item 引起的。如果我有这个它不起作用:

foreach ($params as $key=>$param) 

但如果我这样做了,它会起作用:

foreach ($params as $param)

我不知道为什么,但我将尝试使用简单的 FOR 循环。 感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2016-03-27
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多