Представлен первый альфа-выпуск новой ветки языка программирования PHP 8.3. Релиз намечен на 23 ноября. Основные новшества, уже доступные для тестирования или планируемые к реализации в PHP 8.3:...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=59270
долгих лет жизни лучшему языку программировния
т.е. php4
php4 это худший язык программирования, хотя даже языком полноценным это трудно назвать, так hypertext preprocessor, не более
Слушай, ну в то время когда был php4 - он был вполне себе даже адекватный для уровня его использования.
если программа начинается с метки <?, то это не язык программирования, а препроцессор. В языках программирования компилятор/интерпретатор еще до чтения первого байта находится в состоянии "читаем стейтменты на ЯП". А в препроцессорах наоборот: интерпретатор по умолчанию находится в режиме "выводим исходники как есть", и длится это до тех пор, пока ему явно не скажут, что "всё, начались стейтменты на ЯП".
Ну так себе аргумент. Так можно договориться, что com-файл сразу выполняется, а exe-файл начинается с MZ.
А большинство скриптов начинаются с #!, и что?
Метку формата и внутренняя разметка файла - это разные вещи.
А если с метки <script> ?
Это гораздо, ГОРАЗДО хуже, чем PHP.
Это, [censored], JS.
У JavaScript отлично спроектированный апи, в отличие от пыха, который является франкенштейном из перла, явы и... си. А <script> вставляешь только в HTML, и то только потому, что он в вебе является entry point-ом. В самом js-файле он не нужен, включая браузеры, Node.JS, JScript (Windows 95), DAZ Script, Qt Script, скрипты GNOME, правила polkit... (Любопытно, что JS нашел свое применение далеко за пределами веба и браузера, а пых так и остался "персонал-хоум-пейджем")
сразу видно что костыльный JavaScript глубоко знаешь.
вот скажи: что означает this и сколько обходных путей нужно знать-добавили, чтобы ликвидировать эту отлично исторически заложенную-спроектированную мину. (зато на собеседовании можно вопросы не придумывать)Найди мне язык python, js, c, c++ в котором выражение a+b ты можешь однозначно интерпретировать не изучая код выше, во всех языках это двойственный оператор сложения строк-чисел совершенно разные операторы и только в php сложение строк a.b чисел a+b
php4: быстро скомпилировался быстро выполнился и выплюнул ответ и убился, если не успел тебя убили, мусор-память чистить не надо, все посмертно освободится, поэтому и обьекты в него со скрипом добавляли, чтобы быстро исполнялся (для тех задач он хорош).
Сейчас php7-8 классы, типы, namespce, jit-компиляция, сборка мусора. Когда столкнулся глаза на лоб полезли, настолько не php область, сервера для игр на нём написали, maincraft скрипт месяцами не останавливается.
А то что многие как и ты, в языки не умеют, это не новость, недавно учебник по php7 попался в книжке с базой данных как в php3 работают.
Так что не язык виноват, а прокладка между креслом и клавиатурой.
Сравнивал в ab (ApacheBench) php-fpm и node.js только на первом запросе node.js лидировал, после первого запроса php скомпилировался и его не догнать.
Менять php на js особого смысла нет. С нуля начинать выбор в сторону nodejs - инструментарий восхитительный, пусть php и быстрее, популярность php-хостинга не аргумент, хостинг без nodejs крайне неудобен считаю sass и ему подобный инструментарий необходим.
Что учить: учить и php и js. Необходимо работать в вебе и не знать php нонсенс, не знать js больший нонсенс, да и python лишний не будет, телеграм бот своять или скриптик по быстрому для-на андроиде накидать, без тяжелой андроид-java-студии.
> что означает thisthis — неявный аргумент наряду с arguments.
> ликвидировать эту отлично исторически заложенную-спроектированную мину
Если ты про "потерю this", то для него изобрели arrow functions (ES 2015). Ты назвал далеко не самую бесящую вещь в JS. Она меня и в pre-2015 особо не бесила.
> Найди мне язык python, js, c, c++ в котором выражение a+b ты можешь однозначно интерпретировать
TypeScript.
> Сравнивал в ab (ApacheBench) php-fpm и node.js
> после первого запроса php скомпилировался и его не догнатьМолодец. Поделись ссылкой на гитхаб, покажи, как твои результаты воспроизвести.
> Необходимо работать в вебе и не знать php нонсенс
Учитывая, что ты не знаешь про arrow functions, расскажу тебе, что произошло с веб-разработчиками за последние 10 лет: они стали специализироваться. Одни ушли в бэк, другие во фронт. Рекомендую тебе поступить так же, ибо слово "фулстек-разработчик" ныне стало ругательством.
>>Если ты про "потерю this", то для него изобрели arrow functions (ES 2015). Ты назвал далеко не самую бесящую вещь в JS. Она меня и в pre-2015 особо не бесила.Бесит не бесит, но отлично спроектированным js не назавешь.
Отлично спроектировать js это сохранить совместимость this для dom объектов, и добавить новое слово например self для свеже-добавленных class-ов, но нет наверно для совместимости с си повесили этот функционал на this и разработчики взвыли, а после стали добавлять костыли для обхода проблемы.
И я говорил костыли во множественном числе, есть ещё два, появились до добавления стрелочных функции.
Но ты узко специализированный собеседование моё прошел, помнишь таки главный и часто используемый костыль.
>>Учитывая, что ты не знаешь про arrow functions, расскажу тебе, что произошло с веб-разработчиками за последние 10 лет: они стали специализироваться. Одни ушли в бэк, другие во фронт. Рекомендую тебе поступить так же, ибо слово "фулстек-разработчик" ныне стало ругательством.
Если меня понизят-уволят так и быть послушаюсь
> отлично спроектированным js не назавешь.Ахах, будто существуют "отлично спроектированные" языки, к которым ни одна пaдла не придирается
> вот скажи: что означает this и сколько обходных путей нужно знать-добавили, чтобы ликвидировать эту отлично исторически заложенную-спроектированную мину. (зато на собеседовании можно вопросы не придумывать)1) у меня за 8 лет опыта в повседневной работе с JS никаких проблем c этим злосчастным this не возникает. Если у тебя возникают эти детские ошибки - значит, ты не профи. Учись и практикуйся больше.
2) на собесах и без языков найдут херню для вопросов.
p.s. на PHP не наезжаю, сам писал на нём когда-то.
я не на js завёлся, а на
>>У JavaScript отлично спроектированный апи, в отличие от пыха
Он таким был когда-то.
В современном PHP есть оператор ?>, означающий "print до <?". При этом каждый файл как бы неявно начинается с ?> - такой вот костыль для обратной совместимости.
Golang лучший, а это уже устарело. Писал на php ещё школьником, а теперь у меня уже сыну 7 лет.
>>> а это уже устарело. <<<Да, да! так же как и С/C++/Java, - нет серьезно, вам самим эту шарманку не надоело крутить? Идите лучше хлебните чашечку смузи и расслабтесь.
Человек для себя принял мысль, что он эволюционировал замнив одно дерьмо другим дерьмом.
Отстань от него ... пусть почешет свое самолюбие об OpenNET.
Ещё скажи С, С с плюсами устарели. Помню как почти 20 лет назад читал, что это мертвые языки)))А PHP переживет тебя, меня и твои внуки его увидят в новых проектах.
Старый Си действительно устарел. Следует использовать редакцию 2011 года.
Кроме того, само наличие типов нефиксированной длины не есть хорошо.
А невозможность использовать во всяких #include ссылки в виде URI - это хорошо или плохо? Что-то наподобие #include "https://github.com/foo/bar/file.h"
Если увижу си у внуков, то смирюсь что ничего лучшего не придумали.
Если увижу у внуков php, то разочаруюсь в человечестве.
Паскаль лучше Си.
Ничего не увидишь у внуков, я заберу у них работу
У голанга проблем своих много, типа слабенькой системы packages, неочевидных штук типа сабслайсов указывающих на ту же память что и родительский слайс, тормозной интерфейс к сишным либам cgo, отсутствие деструкторов. В общем голанг уже устарел, сейчас все про раст говорят, там этих проблем нет:)
Оболваненный фанат оболваненного Ленина, пытающийся оболванивать анонимов. Фу таким быть!
Лучшему ли?
https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
Назови язык, который никто никогда не обсирал.
>DateMalformedIntervalStringExceptionОоо, ну теперь пхп похоже серьёзно решил джаву подсидеть
Никак не могу перейти с процедурного стиля на ООП. Посоветуйте, что делать?..
Выучить Лисп.
Выучил Scheme, возненавидел ООП, присмотрелся к лисповому ООП и понял, что возненавидел мейнстримное ООП, как жить теперь?
Писать на Лиспе, а в свободное время заниматься хобби. Я вот люблю нехитрую мебель мастерить простым инструментом. Оно и для тела полезно, и продаётся неплохо.
> Писать на Лиспе, а в свободное время заниматься хобби. Я вот люблю
> нехитрую мебель мастерить простым инструментом. Оно и для тела полезно, и
> продаётся неплохо.Да, гробы подорожали, говорят, процентов на 40.
Есть где развернуться мастеру.
И никакого тебе пехепе с объектами.
На луа с его метатаблицами
Когда вспомнишь про Дуньку Кулакову, также вспомни, что взаимодействуешь с объектом, а не субъектом.
И попробуй новую позу вместо стандартной процедуры.
Рука незнакомки?
Слишком мало деталей.
Незнакомка может и проктологом оказаться.
если надо переходить, то не надо переходить
Пиши не на пхп а на симфони https://github.com/symfony/symfony-docs
Перечитать по три раза первую часть "Анти-Дюринга" и "Материализм и эмпириокритицизм", после чего, уединившись, медитировать над понятием "отражения".
В какой-то момент на тебя снизойдёт озарение и ты осознаешь, что классы, объекты, методы и вот это всё - суть отражение реальных объектов материального мира.
После этого ты сможешь легко и непринуждённо писать в стиле ООП.
>>Никак не могу перейти с процедурного стиля на ООПВозможно задачи такие, куда ООП можно только за уши притянуть, а те куда ООП сам напрашивается.
Например на микроконтроллерах редко ООП используют, разве что статические объекты. И не потому что ресурсов мало, сейчас их достаточно, а потому что решаемые контроллерами задачи редко сочетаются с ООП.
Все там сочетается. Каждая ножка, каждый управляющий бит в регистре - объект. Еще и посторонним закрываем доступ
>>Каждая ножка, каждый управляющий бит в регистре - объект.Ну это уже маразм.
Во первых переписывать работу, того что и так реализовано в библиотеках, и тем более если переписывать не на Руст, то это 6апрасная трата времени, вместо решения задач.
А во вторых не эффективно, ч что то рабочих примеров не встречал. ;)А вот протоколы связи вполне изящно вписываются в ООП.
Каждый управляющий бит в регистре - объект?
Не целый регистр, а именно бит?
Сочувствую.
Я обычно семантический блок в объект собираю. У меня не микроконтроллеры конечно, но в вашем случае это будет набор регистров, отвечающий за _сущность_ (сиречь как раз _объект_). Разбивать регистры на объекты - это сильно.
Файловый дискрептор - число, неудобно можно, сдуру сложить, или в файловую функцию другое число подкинуть, среда разработки даже не вякнет, что ты не то пихаешь.
А вот вместо файлового дискрептора объект и все становится на место.А вот порядок ножек мне складывать приходилось для эмуляция lpt, да и регистр для яркость плавно менять приходилось. Объекты тут лишние и только затрудняют отладку-понимание.
Всё, кроме одного... вместо 4 допустим байт файлового дескриптора ты получаешь 8 байт на поинтер + 4 на дескриптор. Если там их полторы штуки - дело одно, но если как там описано каждой ноге свой объект, а ног миллиона полтора - тут уже эмбедовка может и не вытянуть :D
Всё, что я озвучу - это, конечно, банальщина. Но раз человек спрашивает, почему бы не ответить. Сразу сделаю оговорку, что описание ниже очень упрощённое. Просто для того, чтобы понять, с чего следует начинать.Сначала надо определиться с данными. Эти данные должны характеризовать некую сущность из реального мира. Эти данные и будут основой для класса. Они называются полями класса.
Следующим шагом должно быть определение процедур (функций), которые будут работать с этими данными: обеспечивать их ввод/вывод, инициализацию, изменение. Эти процедуры станут методами класса.
Вуаля, мы создали новый класс.
Теперь про наследование. Если есть группа сущностей, которые отличаются одна от другой только какими-то дополнительными полями и/или методами, то в родительский класс целесообразно выделить общие для всех групп сущностей поля и методы. А в дочерние классы добавлять уже отличия в виде специфических для данной группы полей или методов.
Почему ООП удобней процедурного программирования? Потому что класс позволяет объединить логически данные и процедуры, которые их обрабатывают, а также изолировать эти данные от влияния извне.
Разумеется, описанной выше упрощённой моделью всё ООП не ограничивается, это всего лишь основы. Но этого должно быть достаточно, чтобы перейти от процедурного программирования к ООП.
Также следует заметить, что ООП не единственная парадигма. Есть ещё функциональное программирование. Но о нём пусть напишет кто-то другой.
Забыть на время про наследование, сконцентрироваться на том, что объекты - это такие мини-программы (класс), которые имеют внутреннее состояние (private), а друг с другом общаются по определенному протоколу (public-методы, реализующие интерфейс). При этом разные мини-программы, реализующие тот же интерфейс, полностью взаимозаменяемы без внешних изменений.Когда начнет получаться, но в классах, реализующих общие интерфейсы, начнется копипаста, тогда уже подключатся абстрактные классы и наследование.
Переопределение readonly-свойств допускается только внутри функции "__clone"О, костылики поехали. Любители стройных извращений ради мaкакеров наступают на заботливо самостоятельно расстеленные грабли, а весь этот бесполезный сахар по сути можно выкинуть.
Надо сначала огородить, а потом в ограде проковырять дырочку. Так и живём.
> // Ранее для извлечения константы BAR нужно было вызывать
> constant(Foo::class . '::' . $name);
> // А теперь достаточно указать
> Foo::{$name};Фля... А с самого начала так нельзя было сделать?
Интуитивно и понятно было бы так: ClassName::$ConstantName без всякого дрочева с фигурными скобочками и ::class.
У меня такое ощущение, что среди core разработчиков PHP тоже победило смузихлёбство, увы.
Так было бы обращение к статической переменной класса
Понятно.Не могу себе представить какой-то реальный юзкейс когда одновременно будут объявлены статическое свойство и константа класса с одинаковым именем.
С этой точки зрения можно было бы запретить такое, и выдавать по запросу ClassName::$classOrConstantName то, что объявлено.
Интуитивно понятно это А.B c А:B,як в Lua, а не А::B с A->B
Но из-за идиотского legacy c объединением строк приходится смотреть на это убожество.
С синтаксисом намутили. Сложнее жабы уже стал.
Пока ещё нет, дженерики не доехали, чтобы <всякое, T> появилось.
ООП - это неудачная попытка замаскировать процедурный стиль.
Использование ООП приводит к выгоранию и шизофрении.
Это если пихать его туда, где он не нужен. ООП здорово облегчает создание сложных программ, но использование его для простых задач даёт просто ненужное усложнение.
Неудачная? Огромное количество разработчиков, которое использует ООП - сплошь идиоты или шизофреники? Очень смелое заявление.Такое ощущение, что ты просто не понимаешь, что это такое, и зачем это нужно.
Ты не шмог в алгоритмы?
Не могу никак изучить какой либо фреймворк. Раз 10 пытался начать писать с помощью laravel, но так ничего и не вышло. В итоге проекты по 7тс строк кода написаны на чистом php. Работают хорошо, написал кучу своих классов, мне всё нравится, но без знания фреймворком я такой никому не нужен на рынке труда)
> написал кучу своих классовПричеши и выкати как новый фреймворк.
Так ему зарплату хочется, а не чтоб нахаляву другие получали зарплаты. Так он этого слона не продаст.
Иногда можно Дорогому Мирозданию заплатить опенсорсным кодом, и тогда оно, может быть, не заберет ногу.
тому из Райфа не очень помогло.
Эээ... это кто?
> Эээ... это кто?Был такой, тоже очень нужный и полезный сотрудник уважаемого (очень!) банка, сам Максут признал полезным.
Интегрировал карту мир, да не выинтегрировал - получил "золотое письмо" и мироздание забрало голову.
Ааа... Нашёл.
А, не заморачивайся - нужен. Просто плохо искал.
У меня по 30-80к строк несколько проектов есть, без внешних фреймворков - всё норм.
Даже в одну морду (если припёрло, было дело...) поддерживаются очень легко.
попробуй через composer по компонентам подтягивать (тот же symfony), так со временем втянешься.
а зачем ты выбрал самый бестолковый и неповоротливый? Yii вроде вполне еще можно осилить какой-нибудь и вполне сможешь конкурировать с 500рублевыми аутсорсерами из одной запрещенной страны.
На мой взгляд весь фокус с фрэймоворками в совместной работе. Только тогда понимаешь всю прелесть SOLID, шаблонов проектирования и фреймворков
Разгребать конюшню всем колхозом - это мило.
Там не про разгребать а про наваливать. В целом да, похоже он прав. Т.е. когда надо вдевятером выносить ребенка за один месяц во что бы то ни стало - фреймворк поможет (при условии что его все девять знают), а в твоей либе я буду этот месяц разбираться, прежде чем смогу что-то дописать.А поддерживать это потом... да ипппись оно конем. Следующий заказчик есть уже!
Ды ладно, либа с нормальной докой и очевидными паттернами применения :)
Куда проще монструозных ларавелов, где надо рулоны кривой-косой документации вычитать, прежде чем юзать.
А в остальном всё так.
> Ды ладно, либа с нормальной докой и очевидными паттернами примененияее читать надо. И каждый раз выяснять - вот это вот не вписалось в паттерны и надо дописывать самому или забыли документировать.
Причем любой произвольно взятый васян с улицы ее видит в первый раз.> Куда проще монструозных ларавелов, где надо рулоны кривой-косой документации вычитать
некогда читать, спринт не ждет! (Я уж не знаю как сейчас принято - копипастить из вопроса на стеке или просто спрашивать чятгпт "напиши мне код". А про твою либу ни тот ни другой не в курсе.)
Но вообще-то предполагалось что HR наловил нам рыбов у которых в перках "уже прочитал" и именно на то с чем мы тут работаем (потому что этих м@к@к-мутантов мильены с тыщами и всегда можно найти с нужными галочками в профиле) и они сразу приступят к вынашиванию.
Ды там читать нечего, обёртка сделана так, чтобы конечному юзеру вообще ни на что почти, кроме своего кода, заморачиваться не приходилось.class MyTask extends \TaskLib\Task
{
...public function main()
{
...
yield true;
...
$store = new \MyCode\ModelStore();
$item = $store['myItem'];
$item->lastChanged = time();
$item->update();
...
yield true;
...
$subTaskResult = yield new \MyCode\MySubtask('arg1', 'arg2');
...
$subTask1 = $this->addSubTask(new \MyCode\MySubtask('arg3', 'arg4'));
$subTask2 = $this->addSubTask(new \MyCode\MySubtask('arg5', 'arg6'));
yield new \TaskLib\Task\WaitOnAll($subTask1, $subTask2);
$subTaskResult1 = $subTask1->taskResult;
$subTaskResult2 = $subTask2->taskResult;
...
yield true;
...
return 'Task result';
}
}Понятно, что чуть-чуть разобраться в основах всё равно надо, но сия база очень простая, и рулонов документации по каждому недоклассу из 5 строк в целом не требует.
Чуваки давайте сюда.
Там как раз эту темку обсуждают.)
https://forum.guns.ru/forummessage/68/2871004.html
Лучше бы перегрузку операторов и ещё типизированные варианты для функций-методов добавили, чтобы if в них не фигачить, вместо вот этого всего бессмысленного сахара для макaкинга.
не нужно этого всего. там только один тип - юнион структура звал