【问题标题】:User defined PHP function fails to return updated variable用户定义的 PHP 函数无法返回更新的变量
【发布时间】:2014-07-04 02:03:20
【问题描述】:

我很难找到与我试图用我的代码完成的任务非常相似的东西。我有一个 while 循环,它为位于 mysql 数据库中的变量的每个实例执行。

$lref = mysqli_query($con,"SELECT * FROM builtl");

while($lrow = mysqli_fetch_array($lref))
{
   //variables from builtl
   $partnum = $lrow['m3num'];
   $lqty = $lrow['qty'];
   //POST to DB
   postcode($partnum,$lqty);
   echo $lqty;
...//More code exists that is not part of the question

用户定义函数 postcode() 仅在设置表单提交按钮(示例代码中除外)时执行。下面是函数本身的一部分。

function postcode($partnum,$lqty)
{
    $bchk = $partnum."sb";
    if(isset($_POST[$bchk]))
    {
    //builtl
    $lqty=$lqty-1;
    $bltmod="UPDATE builtl SET qty=$lqty WHERE m3num=$partnum";
    if (!mysqli_query($con,$bltmod))
    {
    die('Error: ' . mysqli_error($con));
    }
    }
}

当代码执行时,数据库会在函数内部进行更新,但是 while 循环已经生成,并且不会拉入 $lqty 的新值。我希望我以后的一些代码在while 循环使用 $lqty 的更新值。在某处使用 return 会帮助我解决这个问题,还是重新加载页面以提取新的 DB 值会更容易?

【问题讨论】:

  • 您是否希望postcode() 更新$lqty 的值?您需要拥有它return $lqty;,或将$lqty 设为参考(function postcode($partnum, &$lqty))。如果你把它作为一个引用,那么当它在函数中更新时,它会在外面更新。\

标签: php return-value user-defined-functions


【解决方案1】:

使用这一行调用 postcode():

$lqty = postcode($partnum,$lqty);

并在函数末尾从postcode()返回$lqty

return $lqty;

【讨论】:

  • 我忽略了我正在使用我的提交按钮来重新加载整个页面。即使添加了此代码,该值也不会从函数返回。
  • 如果您重新加载整个页面,$_POST 将不再设置,因此$lqty 不会得到更新。
  • 在重新加载的第一个实例上,假设提交导致重新加载,$_POST 被设置并且代码正确执行。我在某处读到 PHP 函数在使用 isset 时无法返回值,这可能是我在这里所面临的吗?
  • 我从未听说过或遇到过这个问题。我无法想象在任何情况下这都行不通。您确定要从 postcode() 返回值并在调用代码中捕获它吗?
【解决方案2】:

尝试改变

function postcode($partnum,$lqty)

function postcode($partnum,&$lqty)

http://www.php.net/manual/en/language.references.pass.php

【讨论】:

  • 您应该尽可能避免通过引用传递。见stackoverflow.com/questions/2157799/…
  • 当然,但这似乎是一个合理的案例。 “我希望我后来在 while 循环中的一些代码使用 $lqty 的更新值”是什么让我认为它是合适的。让 postcode 函数返回一个值(这是合理的),如果它曾经被其他代码调用过,它很可能会导致副作用。但重点。
  • 通过引用传递似乎是适合我情况的理想解决方案。这个解决方案有效,谢谢克里斯。
猜你喜欢
  • 2016-12-19
  • 2020-01-16
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多