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