Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从类方法将值写入全局PHP数组_Php_Arrays_Object - Fatal编程技术网

Can';t从类方法将值写入全局PHP数组

Can';t从类方法将值写入全局PHP数组,php,arrays,object,Php,Arrays,Object,PHP不是我的强项,但我今天在其中尝试了一些OO代码。除了全局级别的$replyArray数组没有被solSet对象的jumble()类方法写入之外,一切都很好。代码中倒数第二个var_转储显示一个空数组。我试着到处乱扔全球关键词,但没有起到任何作用。因为我通过引用新实例化的类来显式传递这个变量,这还不够吗? 谢谢 kk 这似乎与: 但这就是我所做的。整个世界和他的狗都在说全球关键词是“做错了”。怎么办?在函数中引用全局数组 global $replyArray; 在函数中引用全局数组

PHP不是我的强项,但我今天在其中尝试了一些OO代码。除了全局级别的$replyArray数组没有被solSet对象的jumble()类方法写入之外,一切都很好。代码中倒数第二个var_转储显示一个空数组。我试着到处乱扔全球关键词,但没有起到任何作用。因为我通过引用新实例化的类来显式传递这个变量,这还不够吗? 谢谢 kk


这似乎与:
但这就是我所做的。整个世界和他的狗都在说全球关键词是“做错了”。怎么办?

在函数中引用全局数组

 global $replyArray;

在函数中引用全局数组

 global $replyArray;

您的
jumble
方法需要引用
$replyArray
——默认情况下,PHP函数按值操作,这意味着它们操作变量的副本,而不是修改它。看

改变

public function jumble($wh,$ts,$arrShuf,$reply)


变量名前面的符号表示参数是通过引用传递的。

您的
jumble
方法需要引用
$replyArray
——默认情况下,PHP函数按值操作,这意味着它们操作变量的副本,而不是修改它。看

改变

public function jumble($wh,$ts,$arrShuf,$reply)


变量名前面的符号表示参数是通过引用传递的。

或者,您可以简单地返回新的无序数组,而不是从类中更新全局变量(不利于重用和可移植性):

public function jumble($wh,$ts,$arrShuf)
{
  $reply = array();
  foreach($this as $key => $value)
    {
      $newX = rand (($ts/2),$wh - ($ts/2));
      $newY = rand (($ts/2),$wh - ($ts/2));
      $randNo = array_pop($arrShuf);
      $value = "" . $newX . "_" . $newY . "_" . $randNo;
      $this->$key = $value;

      //push coords onto an array for later ajax
      $pushElem = "" . $newX . "_" . $newY;
      $reply[] = $pushElem;
    }

  return $reply;
}
。。。并使用以下响应更新您的全局
$replyArray

//make a solution object
$aSolSet = new solSet;
$replyArray = $aSolSet->jumble($widhi,$tileDim,$randArray);

您甚至不需要将
$reply
参数传递到您的方法中(请注意,少了一个参数),一切都很好并且是自包含的。

或者,您可以简单地返回新的无序数组,而不是从类内更新全局变量(不利于重用和可移植性):

public function jumble($wh,$ts,$arrShuf)
{
  $reply = array();
  foreach($this as $key => $value)
    {
      $newX = rand (($ts/2),$wh - ($ts/2));
      $newY = rand (($ts/2),$wh - ($ts/2));
      $randNo = array_pop($arrShuf);
      $value = "" . $newX . "_" . $newY . "_" . $randNo;
      $this->$key = $value;

      //push coords onto an array for later ajax
      $pushElem = "" . $newX . "_" . $newY;
      $reply[] = $pushElem;
    }

  return $reply;
}
。。。并使用以下响应更新您的全局
$replyArray

//make a solution object
$aSolSet = new solSet;
$replyArray = $aSolSet->jumble($widhi,$tileDim,$randArray);

您甚至不需要将
$reply
参数传递到您的方法中(注意,少了一个参数),一切都很好并且是自包含的。

您实际上不是“通过引用显式传递此变量”-这将是
公共函数混乱($wh,$ts,$arrShuf,&$reply)
您实际上不是“通过引用显式传递此变量”-这将是
公共函数jumble($wh、$ts、$arrShuf,&$reply)
谢谢,这正是我要做的。我在下面勾选了答案,因为这是为什么我的代码不起作用的答案,而不是重写。不过,你的答案对我来说最有意义。我只是固执,这更符合逻辑。足够公平-我在差不多同一时间发表了与Iiann相同的评论。我还我对他的答案投了更高的票,因为它完全符合你的要求……不过,就我个人而言,我更喜欢这种方法,而不是通过引用传递;)谢谢,这正是我要做的。我在下面勾选了答案,因为这是为什么我的代码不起作用而不是重写的答案。不过,你的答案对我来说是最有意义的只是固执,这更符合逻辑。足够公平-我在大约同一时间发表了与Iiann相同的评论。我也对他的答案投了更高的票,因为它完全符合你的要求…不过,就个人而言,我更喜欢这种方法而不是通过引用;)勾选,因为这正是问题所在。我假设了引用。谢谢!勾选,因为这正是问题所在。我正在假设参考。谢谢!谢谢你的回复。我被告知这很淘气!谢谢你的回复。我被告知这很淘气!