Я изучал реализацию класса коллекции в своем приложении PHP, однако у меня возникли некоторые вопросы об использовании этого класса.Нелокальные переменные в методе класса коллекции PHP
Я основываю некоторые из своих методов на классе коллекции Laravel (https://laravel.com/docs/5.2/collections).
Если я использую метод .each:
public function each($callback)
{
foreach ($this->items as $key => $item) {
if ($callback($item, $key) === false) {
break;
}
}
return $this;
}
Как я могу использовать нелокальные переменные в функции обратного вызова? Например, у меня есть коллекция курсов и коллекция пользователей.
$courses = new Collection($this->getCourses());
$users = new Collection($this->getUsers());
// I need to loop through all courses and within each course, loop through
// all users
$courses->each(function($course, $courseKey) {
// How can I make it so $users is available here?
$users->each(function($user, $userKey) {
// How can I make it so $course is available here?
// ...
});
});
Является ли то, что я пытаюсь выполнить плохую практику? Должен ли я использовать ключевое слово global
или это также плохая практика?
Это то, что я искал. Какие версии PHP являются синтаксисом use(). Для этого конкретного приложения я застрял на PHP 5.3.3, поэтому я просто хотел убедиться. – Sean
Не совсем уверен, но я считаю, что анонимные функции стали доступны в 5.3, поэтому я думаю, что это тоже должно быть. Я попробую и дважды проверит –
Я протестировал его в PHP 5.3.3, и он сработал. – Sean