Comments 39
ну наконец то!!! и за Clean Code тоже спасибо большое!
Ну было бы куда чище вынести это все в статические методы класса String
Ну было бы куда чище вынести это все в статические методы класса String
А чем чище?
Между функцией(в неймспейсе, например) и статическим методом класса разницы вобщем то никакой(есть, конечно, любители такого псевдо-ооп, но на них я бы ориентироваться не стал).
Интереснее, возможно, было бы, если у конкретной строки можно было методы вызывать, вроде:
a = "Hello, world!
if(a.contains("world")) {
// Some meaningful stuff
}
Есть сторонние реализации типа такого
$a = new String("Hello, world!");
if($a->contains("world")) {
// Some meaningful stuff
}
Можно, наверное, сделать это же как часть стандартной библиотеке, с нативными реализациями на Си. Но смысла особого лично я не вижу, если не реализовать фичу типа как JS: при вызове методов/свойств на скалярных типах, происходит неявное преобразование скаляра в соотвествующий объект, метод вызывается и значение преобразуется в исходный тип, если надо.
Проще говоря на уровне языка осуществляется неявное преобразование $a->contains("world")
в (new String($a))->contains("world")
, а $b = $a->concat(" and other worlds ")->trim()
в $b = (new String((new String($a))->concat(" and other worlds")->__toString())->trim()->__toString();
Ну вот у меня очень сильные сомнения о необходимости ещё одного типа неявных преобразований в PHP.
Дженерики можно описать в аннотациях и валедировать psalm или PHPStan. Это конечно не тоже самое, что натив, но лучше чем ничего.
Ещё бы PhpStorm их читал...
Можно попробовать плагин PHP Generics.
Сразу отмечу, конечно профи своего дела и я его уважаю.
Но, это как то сужает нашу выборку, вместо обзора. включаем узкий прожектор.
Я бы в будущих подборках всё же вносил специальные ограничения на упоминания материалов/идей и тп от одного человека/компании, чтобы специально нас заставлять смотреть шире.
А так, спасибо за труд.
Вы не в ФАС работаете?
А если серьёзно, не упоминать важные (принятые или с высокой вероятностью принимаемые RFC) и интересные материалы только потому, что от одного человека наоборот заставляет смотреть уже.
Я просто не хочу, чтобы автор не попадал в классическую ловушку. Когда как бы темы многие закрыты, но слишком много одного взгляда (пусть и хорошего).
Поэтому профи специально выбирают самое важное у этих людей, а так по другим новостям пытатся разбавить и другими источниками новостей/полезностей.
Ну а на звезд всегда можно сделать ссылку. где конкретно на него можно подписать и следить.
И уж точно я ничего не имею против Никиты Попова, он признаный профи, делает много важных и интересных штук.
Интересно, есть ли что-нибудь подобное от основных разработчиков ядра php по вопросам асинхронности? Вроде бы тема очень актуальная и дискуссионная, но вот взгляд на эту проблему основных разработчиков php сходу найти не получилось.
А чего не хватает?
Синт. сахара в виде async/await?
Основная проблема то не в самом php, а в экосистеме.
Ну, socket-select и компании уже лет 20. Так, что сказать, что совсем не поддерживает нельзя. Но єто вс' на уровне биндингов к низкоуровневым функциям libc и т. п.
Поправьте, если ошибаюьс. Но php ведь не позволяет из коробки использовать асинхронность? Этого и не хватает.
Асинхронность = возможность приостанавливать и возобновлять поток выполнения программы, для того чтобы не блокировать основной поток выполнения на IO-bound операциях.
В большинстве случаев, при взаимодействии с файлами/сетевыми запросами/пр.(см. блокирующие опепрации) PHP простаивает в ожидании ответа.
Выполнять эти дела в неблокирующем режиме уже можно используя event-loop из amphp/reactphp/swoole и их адаптеры для хранилищ/файлов и пр. вместо существующих блокирующих.
Для приостановки потока выполнения на время IO-операций сейчас используются корутины, которые реализуются через генераторы — nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html, и неблокирующая поток запись/чтение из сокетов, т.е.:
Сделали запрос в БД -> Делаем дела -> при удобном моменте читаем ответ от БД(в php используется кооперативная многозадачность, и если кто-то таки заблокирует поток выполнения будет нехорошо) -> продолжаем поток выполнения который ожидал ответа от базы ($generator->send($data))
Перевели новости Yii: https://yiiframework.ru/news/258/novosti-yii-2020-vypusk-2
Увидел про декораторы и обрадовался, подумалось про аннотации говорится (в тайпскрипте они декораторами называются). Но нет, какая-то очередная магия, честно даже понять не смог, что там происходит.
Будем дальше в симфони страдать с phpdoc.
Я так понял что это работает как что-то среднее между наследованием и композицией. Со стороны наследования взяли поведение, но при этом не используют "extends", а со стороны композиции — то, что в конструктор объект исходного класса передают и присваивают его приватному свойству
Самое забавное что язык активно развивается и продолжает обрастать инструментарием, а хейтеры клана js его хоронят который год.
То что язык развивается не отличает его от других популярных и не очень языков. Странный аргумент.
Митап SymCode вынужденно перенесен на 13 марта да и то пока еще не 100% что получится
Увы, сложно с докладчиками пока что ...
PHP-Дайджест № 174 (10 – 24 февраля 2020)