方法中复制了PHP OOP数组

方法中复制了PHP OOP数组,php,arrays,oop,Php,Arrays,Oop,非常新的OOP,所以请容忍我。我有一个方法可以检查persons数组的特征,并有一个计数器来跟踪事物。persons数组以序列化数据开始,我使用unzerialize()函数将其转换为数组。当我在构造函数中执行var\u dump($this->people)时,我得到了正确的值。当我在类中的任何其他方法中执行相同操作时,数组会重复多次,并且我的计数器会生成不正确的值 同样,在构造函数中执行echo gettype($this->people)会按预期生成array,但在其他方法中会生成arra

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

同样,在构造函数中执行
echo gettype($this->people)
会按预期生成
array
,但在其他方法中会生成
arrayarray…

是什么导致了这种重复?我该怎么解决呢

*编辑*

很抱歉给你带来了困惑。我不知道问题出在哪里,所以很难正确解释

问题不在于我的类定义,而在于我如何使用对象。我已经修改了代码来说明。我以为一旦实例化了对象,它生成的值就会被设置,但是结果是每次调用
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
class-DoStuff
{
私有$num;
公开的结果;
公共功能构造($val)
{
$this->num=$val;
$this->results=[];
}
私有函数compute_num()
{
$this->num++;
$this->results['num']=$this->num;
返回$this->results;
}
公共函数get_results()
{
$this->results=$this->compute_num();
返回$this->results;
}   
}
$nums=新的DoStuff(0);
$nums->get_results();
如果($nums->get_results()['num']==1)
{
printf(“(如果)Num是:%d

”,$nums->get_results()['Num']); } 其他的 { printf(“(else)Num为:%d

”,$nums->get_results()['Num']); } //打印(其他)数量为:3
好的,所以我尝试以数组的形式访问对象。解决方案是在运行
get\u results()
方法之后使用
get\u object\u 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
$nums=newdostuff(0);
$nums->get_results();
$nums=获取对象变量($nums);
如果($nums['results']['num']==1)
{
printf(“(如果)Num是:%d

”,(int)$nums['results']['Num']); } 其他的 { printf(“(else)Num为:%d

”,(int)$nums['results']['Num']); } //打印:(如果)数量为:1
好的,所以我尝试以数组的形式访问对象。解决方案是在运行
get\u results()
方法之后使用
get\u object\u 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
$nums=newdostuff(0);
$nums->get_results();
$nums=获取对象变量($nums);
如果($nums['results']['num']==1)
{
printf(“(如果)Num是:%d

”,(int)$nums['results']['Num']); } 其他的 { printf(“(else)Num为:%d

”,(int)$nums['results']['Num']); } //打印:(如果)数量为:1
您的实际问题是什么?令人困惑。您能否编辑您的问题并显示您在哪些函数中编写了
var\u dump
?看看数组,代码中似乎写了两次
var\u dump
。您的代码在我这边运行得很好。请检查或编辑您的问题并正确输入代码。但在其他方法中…-还有什么其他方法?您的PHP代码段不包含除
get_health()
之外的任何内容,并且它应回显1。若要消除您的混淆,请选中此:-。这表明你的代码运行良好。你的问题到底是什么?令人困惑。您能否编辑您的问题并显示您在哪些函数中编写了
var\u dump
?看看数组,代码中似乎写了两次
var\u dump
。您的代码在我这边运行得很好。请检查或编辑您的问题并正确输入代码。但在其他方法中…-还有什么其他方法?您的PHP代码段不包含除
get_health()
之外的任何内容,并且它应回显1。若要消除您的混淆,请选中此:-。这表明你的代码运行良好。如果你的问题得到解决,最好接受你自己的答案。如果你的问题解决了,接受你自己的答案是一个很好的做法。它也会使您的问题在系统中得到回答。