
- 🤔 14
- 😁 9
- 👍 1
- 💯 1
ПЫ @phpyh
Showing posts older than #972 · Back to latest

Пых Rector, это не то же самое!!! Пошёл делать тикет и нашёл уже существующий с ровно такой же проблемой. И знаете, что там ответил мейнтейнер? That's expected, if the type not match, that means a design issue in the first place, if property is private and…


That's expected, if the type not match, that means a design issue in the first place, if property is private and nullable, and filled via constructor, that means the constructor should be nullable param as well as it just assign -> fill, no nullable check.
null означает «больше нет», а не «никогда не было».
$classOrObject->getCode() === 0 or $result->withCode($classOrObject->getCode());
if ($classOrObject->getCode() !== 0) {
$result->withCode($classOrObject->getCode());
}
withCode() мутирующий, $result = не пропущен.or, а не ||?or на самом дне списка приоритетов, даже ниже, чем присваивание. Это позволяет писать так:
$x = foo() or bar(); // ($x = foo()) or bar();
$x = foo() || bar(); // $x = (foo() || bar());

PaymentURL).Init в try/catch и при ошибке о дублирующемся заказе пробую GetState и CheckOrder, которые возвращают инфу о выставленном счёте.PaymentURL после получения ответа от Т-Банка. А если ответ не дошёл по сети? А если мой сервер упал? А если БД нагружена? А если кролик отошёл погрызть морковку?Пых Video message
This post (sticker, poll or similar) has no web preview. Open in Telegram
Пых 🍆 Thesis Dic Прошло полтора года с тех пор, как я всерьёз начал пилить DI контейнер для Thesis. Набор требований у меня был большой: Модульность Всё есть модуль, включая само приложение. PHP DSL Выразительный и лаконичный, не на массивах. Типобезопасность…

Задепоили приложение в рантайме а-ля RoadRunner, собрали контейнер и готовы принимать запросы. Ни один сервис не инстанциирован, но контейнер максимально готов.
Как быстро испытуемые вернут инстанс контроллера с несколькими зависимостями?
#[Bench] в 🐘 Testo.Forwarded from Пыхник’26 онлайн | 28 сентября – 2 октября
Forwarded from Пыхник’26 онлайн | 28 сентября – 2 октября
This post (sticker, poll or similar) has no web preview. Open in Telegram
Forwarded from Пыхник’26 онлайн | 28 сентября – 2 октября
This post (sticker, poll or similar) has no web preview. Open in Telegram
Tag<T> и содержат типизированные данные. Через хук можно собрать протегированные сервисы, преобразовать их и заинжектить куда угодно.myFunc(...) и $service->method(...) легко объявить сервисами, частично применить аргументы, прочитать атрибуты и подключить как обработчики сообщений, не написав CompilerPass на 1000 строк.docs/ поподробнее про часть аспектов. Буду рад скоро постримить и показать больше!
/**
* @implements Module<Ref<Application>>
*/
final readonly class App implements Module
{
public function configure(Dic $dic): mixed
{
$dic->apply(new AutoconfigureCommands());
$dic->function(self::greet(...));
return $dic->import(new SymfonyConsoleModule(name: 'Пых'));
}
#[AsCommand('greet', aliases: ['g'])]
private static function greet(#[Argument] string $name, SymfonyStyle $io): int
{
$io->title("Hello, {$name}!");
return Command::SUCCESS;
}
}
exit(Dic::run(
module: new App(),
main: static fn(Application $app) => $app->run(),
));
Пыхник’26 онлайн | 28 сентября – 2 октября Video message
Forwarded from Пыхник’26 онлайн | 28 сентября – 2 октября
This post (sticker, poll or similar) has no web preview. Open in Telegram
This post (sticker, poll or similar) has no web preview. Open in Telegram
Forwarded from Пыхник’26 онлайн | 28 сентября – 2 октября
Forwarded from Пыхник’26 онлайн | 28 сентября – 2 октября
This post (sticker, poll or similar) has no web preview. Open in Telegram
/**
* @param list<ReflectionParameter> $parameters
*/
function make(array $parameters): Something {}
list<ReflectionParameter> выражает минимально необходимое знание для решения задачи да и вообще это список из объектов-значений, а не каких-то там примитивов.make можно передать невозможный список параметров, например:
$trimReflection = new ReflectionFunction(trim(...));
make(array_reverse($trimReflection->getParameters()));
$parameters[$i]->getDeclaringFunction() будет давать неконсистентный результат), можно поставить вариадик в начало — способов задать неверный список много, потому что list<ReflectionParameter> ничего толком не регламентирует.ReflectionFunctionAbstract и сама вызывать getParameters():
function make(ReflectionFunctionAbstract $function): Something
{
$parameters = $function->getParameters();
// ...
}
make можно быть уверенным, что список параметров удовлетворяет всем инвариантам, ведь отрефлексировать функцию с неверной сигнатурой не получится...
final class MessedReflectionFunction extends ReflectionFunction
{
public function getParameters(): array
{
return array_reverse(parent::getParameters());
}
}
make(new MessedReflectionFunction(trim(...)));
This post (sticker, poll or similar) has no web preview. Open in Telegram