本文讲解如何设计一个 php 类方法,使其能统一接收字符串或数组参数,并将所有值累积到类的同一个数组属性中,避免每次调用都生成独立数组。核心在于类型归一化与展开合并。
要实现用户数据的持续累积(而非每次调用 add() 都新建一个局部数组),关键在于:将输入统一转为数组,并追加到类的持久化属性中,而非局部变量。
原始代码的问题在于:
- $arr = array(); 在每次 add() 调用时都会重新声明,属于局部变量,作用域仅限于该方法;
- print_r($arr) 仅输出当前批次的数据,未保存也未合并到类状态中;
- 缺乏对历史数据的引用和累加逻辑。
✅ 正确做法是:
- 声明一个类属性(如 public $listOfUsers = [];)作为长期存储容器;
- 将任意输入(字符串或数组)强制转换为数组 —— (array)$stringOrArray 是安全且简洁的方式(字符串变为 [value],原生数组保持不变);
- 使用 array_push($this->listOfUsers, …$convertedArray) 结合 展开运算符 … 实现批量追加(PHP 5.6+ 支持)。
以下是优化后的完整类实现:
class Users
{
public $listOfUsers = [];
public function add($stringOrArray): void
{
array_push($this->listOfUsers, ...(array)$stringOrArray);
}
}
? 使用示例: