PHP技术问询:能否在函数中返回多个新类对象?
在函数中返回多个类对象的可行方式
你的示例里第二个return无法执行,是因为函数执行到第一个return语句就会立即终止并返回值,后续代码不会被执行。要返回多个类对象,你可以用以下几种方式实现:
方式一:返回包含多个对象的数组
这是最直接简单的方式,把需要返回的对象存入数组,一次性返回:
public function model() { $user = new Users(['...' => $user1]); $customer = new Customers(['...' => $customer1]); // 索引数组形式 return [$user, $customer]; // 或者用关联数组,更直观,方便后续取值 // return [ // 'user' => $user, // 'customer' => $customer // ]; }
调用时可以这样获取对象:
// 索引数组解构赋值(PHP 7.1+支持) [$user, $customer] = $yourInstance->model(); // 关联数组取值 $result = $yourInstance->model(); $user = $result['user']; $customer = $result['customer'];
方式二:返回自定义的复合对象
如果需要更清晰的语义,可以定义一个专门的类来封装要返回的多个对象:
// 先定义复合结果类 class ModelComposite { public $user; public $customer; public function __construct(Users $user, Customers $customer) { $this->user = $user; $this->customer = $customer; } } // 原函数返回复合对象实例 public function model() { $user = new Users(['...' => $user1]); $customer = new Customers(['...' => $customer1]); return new ModelComposite($user, $customer); }
调用时通过对象属性获取:
$result = $yourInstance->model(); $user = $result->user; $customer = $result->customer;
方式三:使用生成器逐个返回对象
如果需要逐个处理对象,可以用PHP的生成器(PHP 5.5及以上支持),通过yield语句依次返回对象:
public function model() { yield new Users(['...' => $user1]); yield new Customers(['...' => $customer1]); }
调用时通过遍历生成器获取每个对象:
foreach ($yourInstance->model() as $object) { // 根据对象类型做不同处理 if ($object instanceof Users) { // 处理用户对象 } elseif ($object instanceof Customers) { // 处理客户对象 } }
内容的提问来源于stack exchange,提问作者HarLton Hinon
相关产品推荐
相关产品推荐

