Pull to refresh
44
0
Несмеянов Кирилл @SerafimArts

Руководитель Отдела Сокрытия Раскрытых Рептилоидов

Send message

А по индексу Tiobe он в 2022 на 2 позиции вверх скакнул

Душнила mode on =)


Раньше писать в них код и читать его можно было только в конструкторе

Нет, писать в них значения (один раз) и читать их можно было где угодно https://onlinephp.io/c/7a36c


Заголовок спойлера
<?php

class Test
{
    public readonly string $title;

    public function init(): void
    {
        $this->title = 'some';
    }
}

$t = new Test();
$t->init();

var_dump($t->title);

Теперь вместо того, чтобы указывать тип mixed для аргументов в методах, можно просто перечислять необходимые типы через амперсанд.

Тоже нет. Это означает, что в PHP 8.2 можно использовать и конъюнкцию и дизъюнкцию одновременно. Раньше можно было использовать либо одно (И), либо другое (ИЛИ). Более того, любая подобная форма так же подвержена правилам Барабары Лисков:


abstract class ParentClass
{
    abstract public function test(): (A&B)|null;
}

class ChildClass extends ParentClass
{
    public function test(): A&B {}
}

Это изменение единогласно приняла вся команда разработчиков PHP, так как в ядре PHP есть методы, классы и функции, которые возвращают false или true.

Не совсем. Вначале речь в обсуждении (если не путаю) шла о добавлении true, т.к. уже был отдельно false (который использовался в stdlib часто из-за СИшного легаси апи). Для того, чтобы просто привести систему типов к единообразию (а не для каких-то практических целей).


А выделение подобных типов в standalone было сделано для того, чтобы их можно было сужать по LSP:


// parent
public function request(): Response|false;

// child
public function request(): false;

И вроде как даже в отдельном обсуждении было.


Теперь можно передавать в методы iterator_() тип \Traversables

И раньше можно было. А сейчас можно iterable (т.е. входящие аргументы \Traversable заменили на array|\Traversable).


Да и проверять на тип раньше тоже не обязательно было, можно было просто count([...$iterable]) писать вместо count + iterable_count для разных типов. Просто это работало долго.

А, ну если можно "поразвлекаться" со всяким вокруг, то да. Понял, принял. Спасибо.

Ну я смотрел код Битрикс24, там код по-ощущениям вообще ничем не отличается. Такой же трешак. Так что тот факт что я называю его просто "Битриксом" — роли не играет особо.


Да и не думаю, что для других тоже будет какая-то разница.

Допустим, это довольно популярный и логичный кейс для MVP. Но ведь вы говорите:


Для создания хорошего продукта нужны хорошие специалисты. При их отсутствии и хороший продукт можно испортить.

Однако есть проблема, что любой хороший специалист, когда слышит слово "битрикс" — сразу же отказывается, это прям константа в современном мире. И не важно какие условия или деньги ему предлагают (ну в рамках разумного, конечно. Т.к. в полтора-два раза выше рынка я бы подумал уже). Как у вас получилось так завлечь людей на подобное?

Хм… И в чём тогда смысл использования Битрикса, если для его использования и поддержки требуется его переписать с нуля?

Есть подозрение, что эта сделка их погубила. После того, что там случилось — вообще перестал открывать почту и заходить на Яндекс, т.к. просто не смог найти где это делается и как.


И только сейчас из этой новости узнал (вообще я лукавлю, узнал позавчера, но всё равно...) о том, что оказывается есть ya.ru, где всё работает.


P.S. Интересно посмотреть на статистику. Как сильно она провалилась у yandex.ru, после начала этих "редиректов". Вангую, что процентов на ~70% стало меньше народу.

Так оно с win11 полностью слизано) Тот же "контрол центр" на последнем скрине вообще полностью повторяет вообще всё, вплоть до формы ползунка громкости (включая точку посередине). Ну наверное кроме "шестерёнки", она снизу, а не сверху.

Каждый yield — это точка останова приложения. Т.е. этакий Command в CQS. А в сагах он лишь позволяет достигнув какой-то определённой точки иметь возможность откатить все изменения назад, воспроизведя команды в обратном порядке (с их компенcацией):


try {
  yield сделать_заказ->otherwise(отменить_заказ);
  yield списать_деньги->otherwise(начислить_деньги);
  yield доставить_заказ;
} catch(Throwable) {
  // Воспроизвести всё взад
}

В запросах оно имеет смысл лишь когда есть задача отменить запрос в случае ошибки и вернуть всё взад.

Ну, допустим, с помощью file_get_contents тоже можно отправлять POST запросы. Просто оставлю ссылку на документацию тут: https://www.php.net/manual/ru/function.stream-context-create.php

В Blade мне лично не достает однострочников типа

{{ $var ? $var : $var2 }} и {{ $loop->last ? ', ', '' }}соответсвенно

Когда пакет появлялся только — лицензия была проприетарной. И условно-платной (по договорённости) для коммерческого использования.


Если я ничего не перепутал, конечно.

Ну вот вы не говорили, а снести надо бы...)

PHP и так из коробки (начиная с 7.4+) умеет в WinForms и так же можно и список дисков получить и реестр прочитать (последнее сложнее, т.к. АПИ у него довольно помоечное).

Но курс называется "PHP. Профессиональная веб-разработка".



Основная его цель — научить нулевиков решать типовые задачи веб-разработки с помощью PHP.

Так вы сами же и противоречите себе. Переименуйте в "PHP: Основы для джунов". Студент, который не знает таких элементарных вещей — не может являться профессионалом. Любителем максимум.

Включение неблокирующего режима доступно для любых стримов, не обязательно сокетов. Можно и через fopen:


$fp = fopen('http://path-to.site', 'r');
stream_set_blocking($fp, false);
ORM-ов на основе mysqli я не видел.

Как минимум Doctrine и Eloquent. У них под капотом doctrine/dbal, которому вообще пофигу какой драйвер стоит. Да хоть OCI или ещё что.

Кирилл, я имел в виду, что в стандартной библиотеке нет готового "setInterval" или иных инструментов, чтобы отложить задачу.

Давай я чуток подушню тогда)))


Чтобы именно "отложить" задачу — могу назвать как минимум 3 сходу:


Через GC (выполнится во время подчистки мусора)
$deferred = new class {
    public function __destruct() {
        echo 'Deferred';
    }
};

echo 'Some ';

// Some Deferred

Внедрение в 'тики' VM
<?php
declare(ticks=1);

register_tick_function(function () {
    echo 'ТАЙМЕР';
});

echo 'делаем';
echo 'какую-то';
echo 'фигню';

// ТАЙМЕРделаемТАЙМЕРкакую-тоТАЙМЕРфигнюТАЙМЕР

Через хендлер завершения процесса
<?php

register_shutdown_function(function () {
    echo 'Я всё';
});

echo 'Привет';
echo 'Мир';
// ПриветМирЯ всё
Возможно ли такое в PHP с использованием стандартного синтаксиса языка и стандартной библиотеки?

Нет.

Ну как сказать, вот набросал на коленке по-быстрому: https://github.com/SerafimArts/simple-interval-example


P.S. А, дочитал до момента где описывается React c почти аналогичной реализацией. Зря получается пример набрасывал: "Коммент пиши — статью не читай", ага.


Тогда я не понял почему в этом тезисе "нет" написано? Что стандартными средствами языка подобное невозможно.

Information

Rating
4,279-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity