На кой черт вам делать итерацию внутри обьекта и перебирать все его свойства?
PHP очень гибкий язык. Собственно, об этом и написана статья.
Он позволяет вам реализовать любой ваш собственный алгоритм итерации, а не только «перебирать все его свойства», причем сделать это можно довольно элегантно — берете стандартный интерфейс и реализуете его так, как вам пожелается.
Разделять интерфейс и реализацию, понимаете? Не этому ли учат на первых лекциях по ООП?
90% задач — собрать данные, объединить по массиву ключей, осуществить поиск, сохранить в базу.
И тут нас настигают две проблемы.
1. Массив — не объект, у него нет специализированного типа, значит нет контроля типа, приходится городить сложную валидацию вместо простого instanceof
2. Массив — не объект, у него нет методов, поэтому приходится городить «внешние методы» и тут см. п. 1.
И мы с вами очень плавно переходим к тому, что нам нужны всё-таки типы и методы… А это что? Это классы и объекты. Чёрт… Засада какая!
Ну как же нет…
Вот же: «В SPL включено несколько встроенных классов итераторов» и далее по тексту — ровно эта ссылка.
Впрочем, вы правы, список важный, продублировал в списке литературы.
И опять же вы говорите «важнее». «Список классов из SPL знать наизусть» важнее чем что? Чем знать о существовании iterable и о том, что это такое? Позвольте не согласиться.
Печальная история о том, что в команде проекта нет человека, который лично, своей задницей, отвечает за превращение оценки в человеко-часах в сроки на календаре.
Пока такого человека не появится, пока он не взвалит на себя тяжкий труд разбираться в каждой конкретной ситуации в магии таких преобразований — фейлы будут вас преследовать на каждом проекте.
Программист дает оценку задач. И отвечает за свою оценку в разумных пределах.
Тим-лид? Дает сводную оценку трудозатрат и рисков. И отвечает за эту оценку.
Сроки? Это не сюда, это к тем, кто работает с заказчиком. Программист не должен ничего знать о сроках. Его задача — сделать задачу, оцененную в 2 часа, не более, чем за 3 часа. Грубо говоря ))
Разумеется, никто так в повседневной речи не говорит и не пишет. Но — контекст. Это тот самый культурный контекст, без которого вы современный язык не поймете.
Ой, ладно. Английский — простой.
Да, язык прост. Это факт. Однако то, чему вас тут учат и «настоящий английский» — это два разных языка.
Переведите с ходу простейшее словосочетание «thou seest» *? А это вполне себе нормативный английский, и я уверен, что однажды вы такое в письменной речи встретите, хотя бы в виде цитаты.
* Это очень простой тест. Простейший. И тупейший. Который показывает, что 9 лет изучения английского (7 в школе и 2 в институте) прошли для вас зря. Не вы в этом виноваты, разумеется, а те, кто вас учил на текстах типа «London is a capital...»
Почему «не интересоваться смежными областями»? Я интересуюсь.
Например интересуюсь, как написать на PHP многопоточный неблокирующий код, как собрать ZTE под RHEL, интересуюсь вопросом, как на один инстанс postgres класть 10 000 insert-ов в секунду, не положив этот инстанс, интересуюсь, как автоматизировать деплой php-приложения на несколько десятков тестовых стендов и запустить (опять же в несколько потоков) толстую пачку тестов…
Это не смежные области?
Ну неинтересен мне JS и фронт, не люблю я их — что же делать-то?
trait THasEmail
implements IHasEmail
{
protected $email;
public function getEmail()
{
return $this->email;
}
}
class User {
use THasEmail;
}
assert(User instanceof IHasEmail);
https://wiki.php.net/rfc/traits-with-interfaces
P.S. Писал комментарий с калькулятора, возможны неточности.
Если речь о полях класса (статические свойства), то да — в PHP такое сплошь и рядом, называется «позднее статическое связывание». Разумеется, это исключительно рантайм-фича (а как иначе?)
Ну и трейты там же имеют право обращаться к любым свойствам и методам подмешивающего их класса-или-объекта. Если же свойства или метода вдруг нет — fatal error. Разумеется, тоже рантайм.
Впрочем вы, очевидно, ждали ответ про compile-time. Такого, насколько я знаю, нет нигде. Буду рад, если кто-то укажет на пробел в моих знаниях.
Еще один критик-теоретик (см. его активность: https://github.com/binarygenius?tab=activity ) решил заработать себе баллов на критике PHP.
Видимо каждый начинающий программист должен написать дейтинг на PHP, свою CMS свой фреймворк и покритиковать PHP. ОК. Примем это просто как должное. Все должны через это пройти. Переболеть, как ветрянкой в детстве. И лучше в детстве, поверьте, очень печально смотреть, как взрослый мужик болеет ветрянкой (или критикует PHP).
А мы, практики, пойдем дальше использовать этот язык для решения бизнес-задач. Которые, надо отметить, он решает быстро и очень качественно. Кому не нравится — можете и дальше писать статьи о том, какой PHP плохой и какое у него омерзительное сообщество.
PHP очень гибкий язык. Собственно, об этом и написана статья.
Он позволяет вам реализовать любой ваш собственный алгоритм итерации, а не только «перебирать все его свойства», причем сделать это можно довольно элегантно — берете стандартный интерфейс и реализуете его так, как вам пожелается.
Разделять интерфейс и реализацию, понимаете? Не этому ли учат на первых лекциях по ООП?
И тут нас настигают две проблемы.
1. Массив — не объект, у него нет специализированного типа, значит нет контроля типа, приходится городить сложную валидацию вместо простого instanceof
2. Массив — не объект, у него нет методов, поэтому приходится городить «внешние методы» и тут см. п. 1.
И мы с вами очень плавно переходим к тому, что нам нужны всё-таки типы и методы… А это что? Это классы и объекты. Чёрт… Засада какая!
Куда уж больше-то :)
не туда ответилВот же: «В SPL включено несколько встроенных классов итераторов» и далее по тексту — ровно эта ссылка.
Впрочем, вы правы, список важный, продублировал в списке литературы.
И опять же вы говорите «важнее». «Список классов из SPL знать наизусть» важнее чем что? Чем знать о существовании iterable и о том, что это такое? Позвольте не согласиться.
Пока такого человека не появится, пока он не взвалит на себя тяжкий труд разбираться в каждой конкретной ситуации в магии таких преобразований — фейлы будут вас преследовать на каждом проекте.
Программист дает оценку задач. И отвечает за свою оценку в разумных пределах.
Тим-лид? Дает сводную оценку трудозатрат и рисков. И отвечает за эту оценку.
Сроки? Это не сюда, это к тем, кто работает с заказчиком. Программист не должен ничего знать о сроках. Его задача — сделать задачу, оцененную в 2 часа, не более, чем за 3 часа. Грубо говоря ))
Да, язык прост. Это факт. Однако то, чему вас тут учат и «настоящий английский» — это два разных языка.
Переведите с ходу простейшее словосочетание «thou seest» *? А это вполне себе нормативный английский, и я уверен, что однажды вы такое в письменной речи встретите, хотя бы в виде цитаты.
* Это очень простой тест. Простейший. И тупейший. Который показывает, что 9 лет изучения английского (7 в школе и 2 в институте) прошли для вас зря. Не вы в этом виноваты, разумеется, а те, кто вас учил на текстах типа «London is a capital...»
Например интересуюсь, как написать на PHP многопоточный неблокирующий код, как собрать ZTE под RHEL, интересуюсь вопросом, как на один инстанс postgres класть 10 000 insert-ов в секунду, не положив этот инстанс, интересуюсь, как автоматизировать деплой php-приложения на несколько десятков тестовых стендов и запустить (опять же в несколько потоков) толстую пачку тестов…
Это не смежные области?
Ну неинтересен мне JS и фронт, не люблю я их — что же делать-то?
И да, на PHP я пишу 13 лет. И все эти годы прекрасно обходился без JS и вёрстки. Что я делаю не так?
понял, что статья — полная чушь.
Спасибо, что поставили эту фразу пораньше в тексте, сэкономили мое время.
Кол вам за тему «MVC», приходите пересдавать.
На дворе 2016 год, просыпайтесь, коллеги!
Это вы для кого пишете? Послание в прошлое?
https://wiki.php.net/rfc/traits-with-interfaces
P.S. Писал комментарий с калькулятора, возможны неточности.
Но уж очень режет глаз
вместо MS SQL Server. Задевает этот нелепый (и непроизвольный) снобизм, как будто бы других серверов, кроме MS, на свете нет!
Ну и трейты там же имеют право обращаться к любым свойствам и методам подмешивающего их класса-или-объекта. Если же свойства или метода вдруг нет — fatal error. Разумеется, тоже рантайм.
Впрочем вы, очевидно, ждали ответ про compile-time. Такого, насколько я знаю, нет нигде. Буду рад, если кто-то укажет на пробел в моих знаниях.
Видимо каждый начинающий программист должен написать
дейтинг на PHP, свою CMSсвой фреймворк и покритиковать PHP. ОК. Примем это просто как должное. Все должны через это пройти. Переболеть, как ветрянкой в детстве. И лучше в детстве, поверьте, очень печально смотреть, как взрослый мужик болеет ветрянкой (или критикует PHP).А мы, практики, пойдем дальше использовать этот язык для решения бизнес-задач. Которые, надо отметить, он решает быстро и очень качественно. Кому не нравится — можете и дальше писать статьи о том, какой PHP плохой и какое у него омерзительное сообщество.