Вариант с global хреновый. Как минимум потому что привязывает к имени переменной, и лучше вообще не использовать таких неявных вещей, а всё делать однозначно и прозрачно.
<?php
$users = [];
$users[] = new_user('Ivan', 'Cornev');
$users[] = new_user('Ruslan', 'Ivanov');
$users[] = new_user('Alexandr', 'Makar');
function new_user($name, $last_name) {
return ['name' => $name, 'last_name' => $last_name];
}
var_dump($users);
Логичнее использовать для массива имя переменной во множественном числе
$users
, потому что в ней хранится множество пользователей. А для функции добавления пользователя логичнее использовать единственное число
new_user()
, потому что добавляется один пользователь.
Если сильно хочется, то возможен вариант с передачей по ссылке:
<?php
$users = [];
new_user($users, 'Ivan', 'Cornev');
new_user($users, 'Ruslan', 'Ivanov');
new_user($users, 'Alexandr', 'Makar');
function new_user(&$arr, $name, $last_name) {
$arr[] = ['name' => $name, 'last_name' => $last_name];
}
var_dump($users);
Намного более выразительной, гибкой и функциональной будет ООП реализация:
<?php
<?php
class UsersCollection
{
private $users = [];
public function getAll() : array
{
return $this->users;
}
public function add(String $name, String $last_name) : void
{
$this->users[] = ['name' => $name, 'last_name' => $last_name];
}
}
$users = new UsersCollection();
$users->add('Irina', 'Vasilyevna');
$users->add('Alexandr', 'Makar');
$users->add('Ruslan', 'Ivanov');
var_dump($users->getAll());