Поддержка анонимнынх классов добавлена в PHP 7.
Некоторые моменты об анонимных классах в PHP:
Синтаксис почти идентичен именованому классу, это просто класс без имени. Вот почему он называется Анонимный класс.
Что вы можете сделать, используя анонимные классы:
- можно назначить его переменной
- может вернуться из функции
- может передаваться как аргумент функции
- почти как обычный класс - может расширять класс, может реализовывать интерфейсы, использовать трейты
- не может быть сериализован
Более подробный обзор анонимных классов см. в документации.
Случаи использования анонимных классов в PHP:
- создание простых одноразовых объектов
- в модульном тестировании
Подробнее описано в RFC.
Достаточно воды, давайте перейдем к сценарию реального использования.
У нас есть ресурс API, который возвращает пользователей. Наша задача состоит в том, чтобы напечатать имена пользователей в порядке убывания количества фоловеров. (т.е. отсортировать по количеству фоловеров)
Ответ от json выглядит так (с большим количеством объектов):
[ { "text": "Voluptate aliqua consectetur reprehenderit fugiat cillum labore id dolore cillum sint ad tempor commodo. Veniam aute duis Lorem ea nisi exercitation elit officia. Cillum esse ea dolore ullamco anim aliquip est.\r\n", "created_at": "2014-02-25T09:20:21 -06:-30", "id": "59821540f0d11ec0019f907e", "user": { "followers_count": 893747, "name": "Nunez", "id": "89cc4635-6404-40b9-b15b-82e3514ab4c8" } }, { "text": "Cupidatat fugiat sunt reprehenderit incididunt aute adipisicing magna cupidatat nulla consectetur anim magna. Id occaecat incididunt in nostrud amet. Aute dolore proident occaecat elit consectetur. Exercitation mollit cillum dolore culpa ea ipsum tempor est. Magna ipsum ex amet elit excepteur.\r\n", "created_at": "2015-08-21T08:26:19 -06:-30", "id": "59821540c8e9abd4618e9034", "user": { "followers_count": 311461, "name": "Chang", "id": "f0e283d0-bfd6-4c06-89f9-a4c71b7c5f17" } }]теперь давайте реализуем решение
<?php
$json = json_decode(file_get_contents("https://gist.githubusercontent.com/anonymous/65a02c91a2a2ea087198a9be74e7dbc4/raw/45359731cd00119c4f761ff813e6b76a4c8e22bf/users.json"), true);
$topUsers = new class() extends \SplHeap{ protected function compare($value1, $value2) { return (int)$value1['user']['followers_count'] <=> (int)$value2['user']['followers_count']; }};
foreach ($json as $data) { $topUsers->insert($data);}
echo "User"." - "."Followers".PHP_EOL;foreach ($topUsers as $user) { echo $user['user']['name'].' - '.$user['user']['followers_count'].PHP_EOL;}O/P
User - FollowersLorena - 1441740Mcfadden - 1432646Angel - 1416512Jana - 1399750Laurie - 1373911Louisa - 1237079Avila - 1228972Hoffman - 1151910Robert - 1138613Patty - 1095499Sylvia - 1055464Bobbi - 1053050Fitzgerald - 1038147Morrow - 998797Nunez - 893747Stanley - 810207Scott - 790395Natalie - 761451Hurley - 709661Lang - 575764Mccullough - 550085Matilda - 481552Santiago - 464343Fuller - 442185Callahan - 433387Morgan - 403480Clemons - 351374Boyle - 351141Leona - 323783Chang - 311461Madge - 289641Tucker - 274473Grace - 229155Aisha - 211126Knight - 207963Walsh - 142328Hollie - 120530Reynolds - 89821Clements - 78024Acevedo - 47894