Я думаю, что можно было бы отладочную версию в первопредке части объектов так и сделать и на продакшене просто убирать или заменять на логи с дампом стека и окружения.
По первам, как пример тёмной стороны магии, — поймал грабли такого молчаливого принятия несуществующих методов и свойств, которые поменяли местами логику кода.
Да, меня такие мысли тоже часто посещают — к ним ещё добавился опыт программирования на питоне :-)
Хочется в действительности совместить лучшие качества всех языков. Но мучает мысль, что лучшие они только до первой попытки создания этой гремучей смеси ))
Всё-таки наверно это было сделано ради простоты конвертации старых проектов, там где много mysql_ вызовов прямо в коде (да, такого ужаса хватает), без всяких абстракций вроде DB.
Но тут ситуация действительно такая: я тоже себе долго планировал перейти на mysqli — вроде и кода менять не много было, всё было вынесено в отдельный класс, но всё руки не доходили, не жало оно мне. А потом оказалось не актуально — перешёл на pg.
Да, про это я тоже писал, но про лямбды — таки мои данные оказались устаревшими, анонимные функции теперь замыкаются на экземпляр класса, в котором созданы.
А в Советской России — программисты подсказывают IDE :-)
Вопрос, как выше уже обсудили не в том, чтобы знать порядок, а в том, чтобы порядок не мешал более хитрым динамическим конструкциям. Впрочем, мне переименование понадобилось ради лаконичных имён, позволяющих писать сложные выражения в строчку.
1. Ну уже поделитесь — таки любопытно. Обещаю не использовать как доказательство ни pro, ни contrau )))
2. Хорошо, с простой функцией — признаю, $callback(...) вполне работает подобно указателю, что с именем, переданным строкой, что с экземпляром Closure. Изящество пропадает при включении в эту модель методов объектов, но они по задумке ФП вроде как и не планировались…
__set, __get, __call — это не совсем костыли, это магия :-)
То есть с их помощью можно реализовать куда больше, чем тривиальные геттеры и сеттеры. У меня например с их помощью реализуются миксины в рантайме, чего язык, даже в версии 5.5 до сих пор не предусматривает (trait'ы нельзя скомпоновать динамически).
Хотя последнее время магию сильно критикуют и есть за что, но в умелых руках и гомеопатических дозах — она бесценна.
В языке есть возможность вызывать функции и классы по именам, но нет возможности передать ссылку на функцию или на класс. Даже лямбды — это по сути костыль в виде объекта с магическим методом.
Даже не знаю, каков критерий «много/мало»? По логике «больше нуля» — это уже много. Вопрос в другом — это было неизбежным, это не потребовало много времени, это не приводит к смертельному оверхеду, это до сих пор не вызвало конфликтов. Что ещё требуется от данного решения?
Да, хотелось бы, чтобы оно не понадобилось в принципе. Но оно понадобилось и с этим будем жить дальше.
По первам, как пример тёмной стороны магии, — поймал грабли такого молчаливого принятия несуществующих методов и свойств, которые поменяли местами логику кода.
Хочется в действительности совместить лучшие качества всех языков. Но мучает мысль, что лучшие они только до первой попытки создания этой гремучей смеси ))
Но тут ситуация действительно такая: я тоже себе долго планировал перейти на mysqli — вроде и кода менять не много было, всё было вынесено в отдельный класс, но всё руки не доходили, не жало оно мне. А потом оказалось не актуально — перешёл на pg.
А я его по наивности через use пропихивать пытался, так и пришёл к выводу, что не работает, очень расстроился :-)
Вопрос, как выше уже обсудили не в том, чтобы знать порядок, а в том, чтобы порядок не мешал более хитрым динамическим конструкциям. Впрочем, мне переименование понадобилось ради лаконичных имён, позволяющих писать сложные выражения в строчку.
2. Хорошо, с простой функцией — признаю, $callback(...) вполне работает подобно указателю, что с именем, переданным строкой, что с экземпляром Closure. Изящество пропадает при включении в эту модель методов объектов, но они по задумке ФП вроде как и не планировались…
отработает без запинки.
То есть с их помощью можно реализовать куда больше, чем тривиальные геттеры и сеттеры. У меня например с их помощью реализуются миксины в рантайме, чего язык, даже в версии 5.5 до сих пор не предусматривает (trait'ы нельзя скомпоновать динамически).
Хотя последнее время магию сильно критикуют и есть за что, но в умелых руках и гомеопатических дозах — она бесценна.
$b = 'b'
$a->$b() — работает,
$a->b — выкинет исключение? Это непоследовательно
Помимо этого, в php следующий код будет работоспособен
И именно это мешает разрулить: ссылка на метод или на функцию.
mixed mysqli_query ( mysqli $link, string $query [, int $resultmode] )
Да, хотелось бы, чтобы оно не понадобилось в принципе. Но оно понадобилось и с этим будем жить дальше.