PHP OOP 数组在方法中重复


PHP OOP array duplicated in method

OOP非常陌生,所以请耐心等待。我有一种方法可以检查人员阵列的特征,并有一个计数器来跟踪事物。persons数组以序列化数据开始,我正在使用unzerialize((函数将其转换为数组。当我在构造函数中var_dump($this->people)时,我得到正确的值。当我在类中的任何其他方法中执行相同的操作时,数组会重复多次,并且我的计数器会生成不正确的值。

在构造函数中执行echo gettype($this->people)也会导致按预期array,但在其他方法中会导致arrayarrayarrayarray....

导致这种重复的原因是什么?我该如何解决?

*编辑*

很抱歉造成混乱。我不知道问题出在哪里,所以我很难正确解释。

问题不在于我的类定义,而在于我如何使用对象。我已经重新设计了代码来说明。我以为一旦对象被实例化,它产生的值就会被设置,但是事实证明,每次我调用 get_results() 方法时,$this->num都会递增并且值保持不变。

所以我的问题是,如何在不更改值的情况下运行一次 get_results() 方法并访问 results[] 数组?我希望我能做类似if($nums['results']['num'] == 1)的事情,但这会导致致命错误。

class DoStuff
{
    private $num;
    public $results;
    public function __construct($val)
    {
        $this->num = $val;
        $this->results = [];
    }
    private function compute_num()
    {
        $this->num++;
        $this->results['num'] = $this->num;
        return $this->results;
    }
    public function get_results()
    {
        $this->results = $this->compute_num();
        return $this->results;
    }   
}
$nums = new DoStuff(0);
$nums->get_results();
if($nums->get_results()['num'] == 1)
{
    printf('<p>(if) Num is: %d</p>', $nums->get_results()['num']);
}
else 
{
    printf('<p>(else) Num is: %d</p>', $nums->get_results()['num']);
}
// Prints (else) Num is: 3

好的,所以我试图将对象作为数组访问。解决方案是在运行get_results()方法后使用get_object_vars()

$nums = new DoStuff(0);
$nums->get_results();
$nums = get_object_vars($nums);
if($nums['results']['num'] == 1)
{
    printf('<p>(if) Num is: %d</p>', (int) $nums['results']['num']);
}
else 
{
    printf('<p>(else) Num is: %d</p>', (int) $nums['results']['num']);
}
// Prints: (if) Num is: 1