Автор оригинала: С.
От большого количества синтаксического сахара случается синтаксический диабет. Оптимальность в программе нарушается и бывает одышка при увеличении нагрузки. Мне в аналогичной дискуссии привели пример как было бы хорошо писать:
getAll()['id']
А если окажется, что в getAll() чтение из базы? Нет уж! get All(), get('id') и никаких кремовых розочек!
Разделяю мнение, но только с точки зрения ортогональности, и не больше.
С другой стороны, очень хочется написать что-то типа:
$model->fetch($primary)['email'];
И таких случаев в последнее время становится все больше и больше. Хотя не проблема писать $model->fetch($primary)->email, но все же.
Что ни говори, а это серьезное конкурентное упущение разработчиков.
Поскольку PHP - задумывался как ортогональный язык, то такой подход соответствует его философии.
Меня долгое время бесило в PHP отсутствие замыканий, анонимных функций. Ничего, к версии 5.3 - пофиксили.
PHP развивается, и недостатков становится все меньше и меньше. Из простого языка он превращается в полноценный язык.
Помните, как когда-то нельзя было вызывать функцию до ее объявления? Давно пофиксили. И этот момент, я думаю, тоже пофиксят.
PHP задумывался как простой и понятный Си-подобный язык. Вышло так, что он стал практически стандартом в Вебе. Он стал популярный, но резко критикуемый за его ограниченность. Разработчикам пришлось, так сказать, - держать марку, и оправдать популярность "подтягиванием" возможностей. Особенно после бума Ruby on Rails. После такого "пинка под зад" оказалось, что можно и ООП нормально поставить, и замыкания, и анонимные функции, и юникод в ядре 6-ки. И, с перепугу, даже Zend Framework разработали, что не может не радовать.
Многих бесит запись типа $text = trim(strtolower($text)), хотя читабельнее $text.lc().trim(). Это позволяет выстраивать понятные, читабельные конструкции.
Вот что интересно. Хотя Питон, в отличии от PHP - это более ярко выраженный ортогональный язык, в некоторых случаях, он предлагает разработчику больше возможностей реализовать одно и тоже различными путями.
P.S.: в какой-то мере, вопрос решается использованием классов Iterator interface, ArrayIterator, SeekableIterator, Countable, ArrayAccess как это делается, например в Zend_Db_Table_Rowset_Abstract