如何在类中通过方法累积字符串与数组值到单一数组属性

7次阅读

如何在类中通过方法累积字符串与数组值到单一数组属性

本文讲解如何设计一个 php 类方法,使其能统一接收字符串或数组参数,并将所有值累积到类的同一个数组属性中,避免每次调用都生成独立数组。核心在于类型归一化与展开合并。

要实现用户数据的持续累积(而非每次调用 add() 都新建一个局部数组),关键在于:将输入统一转为数组,并追加到类的持久化属性中,而非局部变量

原始代码的问题在于:

  • $arr = Array(); 在每次 add() 调用时都会重新声明,属于局部变量,作用域仅限于该方法;
  • print_r($arr) 仅输出当前批次的数据,未保存也未合并到类状态中;
  • 缺乏对历史数据的引用和累加逻辑。

✅ 正确做法是:

  1. 声明一个类属性(如 public $listOfUsers = [];)作为长期存储容器;
  2. 将任意输入(字符串或数组)强制转换为数组 —— (array)$stringorArray 是安全且简洁的方式(字符串变为 [value],原生数组保持不变);
  3. 使用 array_push($this->listOfUsers, …$convertedArray) 结合 展开运算符 实现批量追加(php 5.6+ 支持)。

以下是优化后的完整类实现:

class Users {     public $listOfUsers = [];      public function add($stringOrArray): void     {         array_push($this->listOfUsers, ...(array)$stringOrArray);     } }

? 使用示例:

$users = new Users(); $users->add('Terrell Irving'); $users->add('Magdalen Sara Tanner'); $users->add('Chad Niles'); $users->add(['Mervin Spearing', 'Dean Willoughby', 'David Prescott']);  var_export($users->listOfUsers);

✅ 输出结果(单个扁平化数组):

array (   0 => 'Terrell Irving',   1 => 'Magdalen Sara Tanner',   2 => 'Chad Niles',   3 => 'Mervin Spearing',   4 => 'Dean Willoughby',   5 => 'David Prescott', )

⚠️ 注意事项:

  • …(array)$input 是健壮的类型适配方案,比手动 if/else 判断更简洁、不易遗漏边界情况(如 NULL、false 等会被转为空数组,可根据业务需要补充校验);
  • 若需去重,可在 add() 内部或最终获取时调用 array_unique($this->listOfUsers);
  • 如需支持链式调用,可将 return $this; 加入 add() 方法末尾;
  • 属性建议设为 protected 并配合 getter 方法(如 getUsers())以增强封装性,生产环境推荐如此。

通过这一设计,你获得了一个真正“累积式”的数据收集器 —— 每次调用都在向同一数组追加内容,彻底解决“多个孤立数组”的问题。

text=ZqhQzanResources