【问题标题】:PHP - can't add objects into arrayPHP - 无法将对象添加到数组中
【发布时间】:2015-12-19 00:52:41
【问题描述】:

我创建了一个简单的类:

class Event {


   var $a;
   var $b;
   var $c;


   function __construct($a, $b, $c) 
   {
      $this->a= $a;
      $this->b = $b;
      $this->c= $c;
   }



  } 

然后我创建了另一个扩展 Thread 的类:

class WorkerThread extends Thread
{
    private $myUrl;
    private $eventsArr;
    private $counterDebug;
    private $postdata;

    public function __construct($myUrl, $postdata)
    {
        $this->myUrl = $myUrl;
        $this->postdata = $postdata;
        $this->eventsArr = array();
        $this->counterDebug=0;
    }

    public function run()
    {
          $flag=false;

          foreach ($json as $key => $value) {


                    $this->counterDebug++;
                    /* Death event */
                    $event= new Event($a, $b, $c);
                    array_push($this->eventsArr, $event);

                }
              }

            }
          }
          echo (count($this->eventsArr));
          echo (json_encode($event));
          echo ("\n" . $this->counterDebug);

    if($flag && count($this->events)>0){
    ...

当尝试将新创建的对象添加到数组中时,它保持为空。

我从调试中得出的结论:

1) 对象被创建。

2) eventsArr[]= $event 和 array_push 都不起作用。

3) 我已经设置了一个计数器来验证对象正在被创建并且应该被添加到数组中。

我做错了什么?

p.s-

为了简化操作,我删除了不相关部分代码。

【问题讨论】:

  • 我认为您应该创建包含所有事件的临时数组,然后将其提供给 $eventsArr
  • 你试图在 PHP 中解决什么问题,而你最终使用了pthreads?它们工作正常但不需要那么频繁?作为“实验”也不错。除了您不允许任何其他 pthread 运行? pthreads 必须给出一些结果然后wait 直到他们重新获得控制权?

标签: php arrays class


【解决方案1】:

我认为您应该创建包含所有事件的临时数组,然后像这样将其提供给 $eventsArr。

$temp = array();
foreach ($json as $key => $value) {
    $this->counterDebug++;
    /* Death event */
    $event= new Event($a, $b, $c);
    $temp[] = $event;
}
$this->eventsArr = $temp;

foreach ($json as $key => $value) {
    $this->counterDebug++;
    /* Death event */
    $event= new Event($a, $b, $c);
    $this->eventsArr[] = $event;
}

【讨论】:

  • 谢谢!它有效 :) 你能解释一下为什么它只以这种方式有效吗?
  • 我认为您应该将数组传递给 $eventsArr 一次。
  • 请检查我的答案的更新。它将向您解释为什么 eventsArr[] 不适合您。
  • 我已经尝试了第二个选项..它不起作用..只有 $temp 工作..我仍然不明白第二个选项有什么问题
  • 能否请您发布您的第二个选项让我检查一下
猜你喜欢
  • 2020-11-21
  • 2012-03-28
  • 1970-01-01
  • 2018-11-22
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多