方法中复制了PHP OOP数组
非常新的OOP,所以请容忍我。我有一个方法可以检查persons数组的特征,并有一个计数器来跟踪事物。persons数组以序列化数据开始,我使用unzerialize()函数将其转换为数组。当我在构造函数中执行方法中复制了PHP OOP数组,php,arrays,oop,Php,Arrays,Oop,非常新的OOP,所以请容忍我。我有一个方法可以检查persons数组的特征,并有一个计数器来跟踪事物。persons数组以序列化数据开始,我使用unzerialize()函数将其转换为数组。当我在构造函数中执行var\u dump($this->people)时,我得到了正确的值。当我在类中的任何其他方法中执行相同操作时,数组会重复多次,并且我的计数器会生成不正确的值 同样,在构造函数中执行echo gettype($this->people)会按预期生成array,但在其他方法中会生成arra
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。若要消除您的混淆,请选中此:-。这表明你的代码运行良好。如果你的问题得到解决,最好接受你自己的答案。如果你的问题解决了,接受你自己的答案是一个很好的做法。它也会使您的问题在系统中得到回答。