The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования PHP 8.3, opennews (?), 23-Ноя-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


95. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 24-Ноя-23, 13:39 
Ну вот #[Override] - это извращение.
Почему бы просто override не добавить.
Типа public override function xyzzy().
Куда-то оно не туда после 8.1 сворачивать начало совсем...
Ответить | Правка | Наверх | Cообщить модератору

96. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 24-Ноя-23, 13:40 
Анонимные классы - это тоже какой-то 3.14дец. Зачем??? Вся суть определений классов в их статичности.
Ответить | Правка | Наверх | Cообщить модератору

116. "Релиз языка программирования PHP 8.3"  +2 +/
Сообщение от Аноним (116), 24-Ноя-23, 15:16 
Зачем вообще в вебе классы, когда задача в 90 % случаев просто сделать запрос к базе и вернуть результат.
Ответить | Правка | Наверх | Cообщить модератору

155. "Релиз языка программирования PHP 8.3"  +/
Сообщение от x3who (?), 25-Ноя-23, 01:17 
> Зачем вообще в вебе классы, когда задача в 90 % случаев просто
> сделать запрос к базе и вернуть результат.

С классами логика прогаммы организуется лучше, появляется новый уровень строгой типизации, который не даст тебе сделать лишних ошибок.. Я думаю это плюс для любого языка программирования.

Ответить | Правка | Наверх | Cообщить модератору

168. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Sw00p aka Jerom (?), 25-Ноя-23, 12:18 
ага, тенденция микросервисов и классов :))
Ответить | Правка | Наверх | Cообщить модератору

182. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от Аноним (-), 26-Ноя-23, 12:50 
это вид сарказма такой? а типовые взаимодействия с бд, что и является основой, каждый раз вручную что-ли кодить? в них же все обработки/чеки и по типизации, кста. автолоадером легко подхватывается и прекрасно работает. помимо них, ещё куча, которая с массивами работает, вычисления проводит и передаёт их предыдущим. нууу... 2/3 процедурных простыней в моём проекте, примерно, скрыто так. чяднт?
Ответить | Правка | К родителю #116 | Наверх | Cообщить модератору

97. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от Tron is Whistling (?), 24-Ноя-23, 13:41 
Не, я понимаю, что это очередная попытка решить проблему отсутствия множественного наследования - теперь можно на ходу лепить ***ту из классов, но лучше бы первое сделали.
Ответить | Правка | К родителю #95 | Наверх | Cообщить модератору

156. "Релиз языка программирования PHP 8.3"  +/
Сообщение от x3who (?), 25-Ноя-23, 01:20 
> Не, я понимаю, что это очередная попытка решить проблему отсутствия множественного наследования
> - теперь можно на ходу лепить ***ту из классов, но лучше
> бы первое сделали.

Множественное наследование - это извращение. Сам унаследуй и от папы и от мамы - тогда поймешь по реакции окружающих :) Интерфейсы рулят, и, судя по статье, они в пыхе есть.

Ответить | Правка | Наверх | Cообщить модератору

161. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 25-Ноя-23, 09:27 
Сразу видно дальше хеллоуврота или сборки из всяких pypinpm'ов не писавших...
Ответить | Правка | Наверх | Cообщить модератору

183. Скрыто модератором  +/
Сообщение от Аноним (-), 26-Ноя-23, 12:52 
Ответить | Правка | К родителю #97 | Наверх | Cообщить модератору

98. "Релиз языка программирования PHP 8.3"  –2 +/
Сообщение от Tron is Whistling (?), 24-Ноя-23, 13:43 
А того, чего не хватает - так и нет.
А не хватает
- Множественного наследования (уже упомянул)
- Перегрузки базовых операторов
- Перегрузки методов (варианты наборов аргументов), ну и заодно к ним сахарка темплейтов под типы, последнее для тех, кто очень любит типизацию и смузи
Ответить | Правка | К родителю #95 | Наверх | Cообщить модератору

105. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от Аноним (64), 24-Ноя-23, 14:14 
иди со своими перегрузками и множественным наследованием сам знаешь куда
Ответить | Правка | Наверх | Cообщить модератору

107. "Релиз языка программирования PHP 8.3"  +3 +/
Сообщение от тоже Анонимemail (ok), 24-Ноя-23, 14:25 
> А не хватает

Пришел в Пых из Крестов, где этого есть. Но и там не пользовался, и здесь не вижу необходимости.
Множественное наследование - признак неудачной архитектуры ООП. Интерфейсы в РНР есть.
Перегрузки и прочий синтаксический сахар не решает никаких реальных проблем, только затрудняет чтение кода.
Вот более жесткой типизации, конечно, не хватает. Но тут бытие определяет - пых постоянно работает с внешними данными, которые, как правило - строки. Все равно приводить и валидировать самому.

Ответить | Правка | К родителю #98 | Наверх | Cообщить модератору

115. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от Аноним (116), 24-Ноя-23, 15:15 
> Пришел в Пых из Крестов

А чего сразу не в Бейсик?

Ответить | Правка | Наверх | Cообщить модератору

121. "Релиз языка программирования PHP 8.3"  +/
Сообщение от тоже Анонимemail (ok), 24-Ноя-23, 15:36 
Опять он здесь. Пропал тред.
Ответить | Правка | Наверх | Cообщить модератору

123. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от YetAnotherOnanym (ok), 24-Ноя-23, 16:54 
> и там не пользовался, и здесь не вижу необходимости

Речь не мальчика, но мужа. Респект.

Ответить | Правка | К родителю #107 | Наверх | Cообщить модератору

157. "Релиз языка программирования PHP 8.3"  +/
Сообщение от x3who (?), 25-Ноя-23, 01:32 
> Вот более жесткой типизации, конечно, не хватает. Но тут бытие определяет -
> пых постоянно работает с внешними данными, которые, как правило - строки.
> Все равно приводить и валидировать самому.

Вот в классе и валидировать  - подходят ему эти данные или нет

Ответить | Правка | К родителю #107 | Наверх | Cообщить модератору

185. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Аноним (-), 26-Ноя-23, 13:08 
+

правда, чеки/конвертеры стоит иногда в отдельные классы выделять, чтобы массив, одними, правильно собрать с инпута и отдать другим на передачу в бд. в хеллоувордах всё это не проблема, конечно же))

Ответить | Правка | Наверх | Cообщить модератору

117. "Релиз языка программирования PHP 8.3"  +/
Сообщение от подрывник (?), 24-Ноя-23, 15:17 
Наследование реализации — корень всех зол.
Да и не надо его, когда есть интерфейсы классов и подмешивание через "include".
Ответить | Правка | К родителю #98 | Наверх | Cообщить модератору

142. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от Tron is Whistling (?), 24-Ноя-23, 21:55 
Подмешивание через include - это пять.
...
Я даже не знаю.
Похоже не только пых свернул куда-то не туда. Шею.
Ответить | Правка | Наверх | Cообщить модератору

165. "Релиз языка программирования PHP 8.3"  +/
Сообщение от нах. (?), 25-Ноя-23, 10:16 
какие разработчики, такие и технологии.
Ответить | Правка | Наверх | Cообщить модератору

187. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Аноним (-), 26-Ноя-23, 13:13 
да композицией, агрегацией это всё решается внутри, не надо ничего подмешивать. классы с неймспейсами легко же тянутся
Ответить | Правка | К родителю #117 | Наверх | Cообщить модератору

194. "Релиз языка программирования PHP 8.3"  –1 +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 14:50 
Архитектурно есть у тебя сокеты например.

У разных сокетов например (ну, сокетная асинхронная либа у меня) - разные варианты реализации. Есть потоковые, где можно фигачить любыми блоками и доступно чтение любого размера. Есть датаграммы, где надо читать датаграмму целиком. У типичного датаграммного UDP ещё и адрес надо читать. У TCP есть OOB. Есть псевдосокеты сообщений, которые аналогичны датаграммам, но может быть адрес и ID сообщения. И т.п. У разных сокетов есть разные эвенты, которые они пуляют слушателям при событиях.

Сейчас приходится всё это счастье подмешивать через превращение опций в interfaces + traits и цепочке наследования через прототипы, но это такие жёсткие костыли, что блин хочется всё это взять и вырезать. Множественное наследование решило бы проблему полностью,  но нет, приходится костылить.

Ответить | Правка | Наверх | Cообщить модератору

195. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 14:53 
Как пример жёсткого костылинга

class PollingSocketPrototype implements \ATL\ITask { use \ATL\TTask; } # bring in Task class first as first level parent

class PollingSocketPrototype2 extends \ATL\Socket\PollingSocketPrototype implements \ATL\ISocket { use \ATL\TSocket; } # bring in base Socket class as second level parent

abstract class PollingSocket extends \ATL\Socket\PollingSocketPrototype2 implements \ATL\Socket\IPollingSocket { use \ATL\Socket\TPollingSocket; }


abstract class StreamBasePrototype extends \ATL\Socket\PollingSocket implements \ATL\Socket\Capabilities\IBulk { use \ATL\Socket\Capabilities\TBulk; }

abstract class StreamBase extends \ATL\Socket\StreamBasePrototype
{
...
}

abstract class StreamPrototype extends \ATL\Socket\StreamBase implements \ATL\Socket\Capabilities\IReadBytes, \ATL\Socket\Capabilities\IDelimitedReads
{
    use \ATL\Socket\Capabilities\TReadBytes; # bring in readBytes capability
    use \ATL\Socket\Capabilities\TDelimitedReads; # bring in delimited reads capability
}

class Stream extends \ATL\Socket\StreamPrototype
{
...
}

Всё вот это вот решилось бы множественным наследованием легко и просто.

Ответить | Правка | Наверх | Cообщить модератору

198. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 15:00 
Я понимаю, что ты в линейной вебне, которая в основном банальная модель и шаблонизатор - вряд ли это встретишь, но PHP уже давно вышел за рамки вебни, и поэтому вместо вот этого всего странного #[Override] сахарка хотелось бы чего-то серьёзного :)
Ответить | Правка | К родителю #194 | Наверх | Cообщить модератору

236. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Аноним (235), 01-Дек-23, 00:58 
Открой для себя композицию, делегирование и стратегии. Помогает от этой вот лажи, что ты пишешь, и множественного наследования избавиться.
Ответить | Правка | К родителю #194 | Наверх | Cообщить модератору

237. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 01-Дек-23, 14:22 
Попей смузи, и расслабься.
Когда нечем композировать - композировать нечем. Такие дела.
Ответить | Правка | Наверх | Cообщить модератору

197. "Релиз языка программирования PHP 8.3"  –1 +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 14:58 
Ну и да, множественное наследование - это как раз часть композиции-агрегации, которой нет, и это печально.
Ответить | Правка | К родителю #187 | Наверх | Cообщить модератору

199. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 15:01 
Причём реализовать-то уже просто - эмуляция выше легко бы могла быть сделана через use Class хотя бы, не Trait, а класс, который затягивает все интерфейсы и прочее содержимое эквивалентно Trait. Но нет, приходится костылять.
Ответить | Правка | Наверх | Cообщить модератору

200. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 15:07 
class Stream
{
    inherit \ATL\Task; # ATL socket is a task
    inherit \ATL\Socket\PollingSocket; # we are a polling socket
    inherit \ATL\Socket\StreamBase; # use PHP Stream socket base
    inherit \ATL\Socket\Capabilities\ReadBytes; # support readBytes
    inherit \ATL\Socket\Capabilities\DelimitedReads; # support delimited reads
}

Специально написал inherit вместо use - как бы это могло быть. Красивенько, да, по сравнению с костылями выше?

Ответить | Правка | Наверх | Cообщить модератору

202. "Релиз языка программирования PHP 8.3"  +1 +/
Сообщение от тоже Анонимemail (ok), 26-Ноя-23, 15:22 
А решить это заменой наследования композицией - точно не вариант?
Начиная с socket is not a task but task has a socket.
Ответить | Правка | Наверх | Cообщить модератору

204. "Релиз языка программирования PHP 8.3"  –1 +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 16:18 
Никак там не решишь, у разных типов сокетов разные включения, они могут частично перекрываться.
Часть включений перекрывает некоторые единичные методы родителей, но прекрасно использует все остальные.

С таском тоже не выйдет - таск не обязательно сокет, это асинхронный таск вообще для всего. Корутина и её минималистичная обвязка, которая даёт возможности не задумываться о том, как оно вообще всё работает асинхронно, передаёт аргументы и получает результаты, и т.п. + управление, обработка эксепшнов по стеку тасков и т.д. и т.п.

Ответить | Правка | Наверх | Cообщить модератору

205. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 16:23 
Just for fun покажу минимальный тест сокета.

class Test extends \ATL\Task
{
    public function main()
    {
        Log::msg("Main task started");
        yield true;

        try {
            Log::msg("Creating socket");
            $this->taskAddChildTask($socket = new \ATL\Socket\TCP('192.168.77.10', 80, 15));
            yield true;

            Log::msg("Waiting for socket to connect");
            if (($result = yield ($wait = new \ATL\Socket\WaitForConnect($socket))) !== true) {
                if (is_array($result)) throw new \Exception("Socket error {$result[0]} while connecting: {$result[1]}");
                throw new \Exception("Socket timed out while connecting");
            }
            Log::msg("Socket connected");
            Log::msg("Local name: ".$socket->socketLocalName);
            Log::msg("Remote name: ".$socket->socketRemoteName);

            Log::msg("Writing HTTP request to the socket");
            $socket->writeBulk([
                "GET /test.php HTTP/1.1\r\n",
                "Host: alex-at.net\r\n",
                "Connection: close\r\n",
                "\r\n",
            ]);

            Log::msg("Waiting for write data to be flushed down");
            if (($result = yield ($wait = new \ATL\Socket\WaitForWriteFlush($socket, 5))) !== true) {
                if (is_array($result)) throw new \Exception("Socket error {$result[0]} while writing: {$result[1]}");
                throw new \Exception("Socket timed out while waiting for write");
            }

            Log::msg("Reading from socket");
            $wait = new \ATL\Socket\Read($socket, 5);
            $fout = fopen(__DIR__.'/socket_test.out', 'wb');
            do {
                if (($result = yield $wait) !== true) {
                    if (is_array($result)) throw new \Exception("Socket error {$result[0]} while reading: {$result[1]}");
                    throw new \Exception("Socket timed out while reading data");
                }
                if ($wait->readData !== null)
                    fwrite($fout, implode('', $wait->readData));
            } while ($wait->readData !== null);
            fclose($fout);

            Log::msg("Waiting for socket to disconnect");
            if (($result = yield ($wait = new \ATL\Socket\Disconnect($socket, 5, true))) !== true) {
                if (is_array($result)) throw new \Exception("Socket error {$result[0]} while disconnecting: {$result[1]}");
                throw new \Exception("Socket timed out while waiting for disconnect");
            }
        } catch (\Exception $e) {
            Log::msg("ERROR: ".$e->getMessage());
        }

        if (!$socket->isDisconnected()) {
            Log::msg("Aborting socket");
            $socket->abort();
            yield true;
        }

        Log::msg("Main task ended");
    }
}

Ответить | Правка | Наверх | Cообщить модератору

208. "Релиз языка программирования PHP 8.3"  +/
Сообщение от тоже Анонимemail (ok), 26-Ноя-23, 18:28 
Не знаком с используемой библиотекой, но в приведенном коде таски с сокетами смешиваются только в одной строчке. В которой точно так же можно использовать дочерний класс таска с членом-сокетом.
И не гневать святую Барбару..
Ответить | Правка | Наверх | Cообщить модератору

209. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 20:57 
В конкретной реализации - не можно.
Данный сокет, повторюсь, живёт своей жизнью, и к конкретному таску, кроме своего - не прибит.
Ещё есть сокеты-ендпоинты, которые вообще не таски.
Ответить | Правка | Наверх | Cообщить модератору

210. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 21:11 
И да, член у сокета есть, но ему кроме него надо ещё в зависимости от типа затянуть поллинг или нет, стримы или прочие обёртки, дополнительные фичи. Нет, можно всё это замечательно дублировать CTRL-C CTRL-V из класса в класс, ну или вот так извращаться, как выше. Про не-тасковые ендпоинты уже выше писал, они API Socket вполне себе реализуют, но не Task.
Ответить | Правка | К родителю #208 | Наверх | Cообщить модератору

211. "Релиз языка программирования PHP 8.3"  +/
Сообщение от тоже Анонимemail (ok), 27-Ноя-23, 00:32 
Я говорил про тот код, который увидел. В нем сокет используется как таск только в одном месте, причем в этом месте нужен таск, а не сокет.

> CTRL-C CTRL-V

При замене наследования композицией никакой копипасты обычно нет, просто вместо использования публичного интерфейса класса идет обращение к публичному интерфейсу его публичного члена.

Впрочем, я не знаком с этой конкретной предметной областью и не думаю, что от моего теоретизирования насчет кода, который ее покрывает, будет какой-то толк.


Ответить | Правка | Наверх | Cообщить модератору

206. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 16:39 
Сокет вообще как таск живёт своей жизнью - он не обязательно прибит к конкретному родителю, всё зависит от задачи. В самом простом случае родитель - это таск протокола, но в сложных случаях там могут быть дочки, которые выполняют одну задачу в рамках конкретного протокола. Например разобрал команду SMTP в протокольном модуле - отдал сокет приёмнику данных, отработает - вернёт сокет.
Ответить | Правка | К родителю #204 | Наверх | Cообщить модератору

207. "Релиз языка программирования PHP 8.3"  +/
Сообщение от Tron is Whistling (?), 26-Ноя-23, 16:42 
Ну или например увидел в начале PROXY-протокол - отдал разбирать PROXY, разобрал, отдал SMTP.
И т.д. и т.п.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру