Pull to refresh
21
0
Eugene Leonovich @gen

rybakit

Send message

С таким же успехом можно сказать, что и в PHP один типа ключа — int|string. И его так же можно использовать повсеместно: https://3v4l.org/Y5Vrb#v8.1.3 (или даже так: https://3v4l.org/EFUm3#v8.1.3).

Не знал про аналог в Lua, но согласитесь такой тип данных не очень популярен в языках программирования.

Lua был лишь примером, на самом деле много других языков, которые поддерживают разные типы ключей в ассоциативном массиве, вот пример на Go: https://go.dev/play/p/Eb1MhUTaxr1. Кстати, PHP разработчики проделали огромную работу по оптимизации этого типа, в 7-ке появилась концепция "packed array", в 8.1 packed array оптимизировали, убрав ключи во внутреннем представлении структуры. То есть под капотом разделение на map/array уже реализованно в виде ZEND_HASH_PACKED_*/ ZEND_HASH_MAP_* (совсем недавно был только ZEND_HASH_*). Но я согласен, более специализированные структуры данных не помешают, а пока можно воспользоваться DS :)

"Уникальный" тип данных массивохеш

Он не уникальный, в Lua есть тип table.

Лично мне очень не хватает объектной стандартной библиотеке с хорошим именованием.

Если уж сильно не хватает, можно воспользоваться каким-нибудь пакетом, например https://github.com/azjezz/psl.

Если без объектном библиотеки, то хотя бы оператора pipe |> не хватает, чтобы собирать в цепочку вызовы функций.

Совсем недавно была отклонена вторая попытка добавить этот оператор: https://wiki.php.net/rfc/pipe-operator-v2. Обсуждение и причины можно почитать по ссылкам:
* https://externals.io/message/109734
* https://externals.io/message/114770
* https://externals.io/message/115333

Ещё очень не хватает хорошего shell'а на манер python, ruby.

https://psysh.org/ пробовали?

Я вот тоже удивился такой маленькой разнице. Уж на такой синтетике JIT должен просто летать. Результаты на Macbook Pro 2020 (2GHz i5):

JIT: 0m8.558s
не JIT: 0m25.604s
Возможно вы удивитесь, но даже JSON+gzip может в итоге весить больше аналогичных данных, сериализованных в MessagePack.
Google-калькулятор на стороне PHP: https://www.google.com/search?q=-2^2.
Python тоже, кстати:

>>> -2 ** 2
-4
поэкспериментировать с собственной реализацией формата сериализации MessagePack
Если интересно, можно также взглянуть на готовую реализацию.
Это не ОРМка :) По-моему, библиотека весьма посредственная, и есть куда более качественные альтернативы. Я, признаться, удивлен, что она нахватала столько звезд на гитхабе.
Пипец!

А если серьёзно, теперь не вижу больше смысла продолжать пользоваться оперой. Интерфейс у браузера последнее время и так не ахти, единственное что радовало, так это довольно шустрая работа с кучей открытых табов. Если теперь он будет так же тормозить, как и хром при 20 открытых табах, тогда зачем он вообще?
Есть ли планы портировать ваши приложения на андроид, и если да, то когда?
все просто — до края скролится

Я б посмотрел на этот цирк на примере сайта вроде этого )
Возможно, но, по крайней мере, на видео переход назад делается движением пальца вправо.
К примеру, в нём откажутся от кнопко переходов вперёд и назад по страницам в пользу жестов с той же функциональностью.

Интересно, как они обрабатывают случай, когда у страницы есть горизонтальный скролл (или открыты google maps, например), и я двигаю палец вправо. Что должно произойти — передвинуться содержимое страницы или открыться предыдущая страница?
Вы, по-моему, не улавливаете суть. Если вам не нравится psr-N, вы его не поддерживаете в своей библиотеке. Если есть идеи по улучшению, или несогласие с чём-то конкретно — всегда есть issue tracker, изгалайте свои мысли там, вас услышат.
Какой-то перец захотел, чтобы у всех PHP-библиотек логгирования был одинаковый интерфейс.

Не какой-то перец, а какие-то перцы, и не у всех библиотек, а у разрабатываемых этими перцами. Отличное решение, на мой взгляд. Соглашусь только, что корректней было бы его назвать FIG-1 вместо PSR-3.

И да, раскажите, пожалуйста, слезливую историю о том, как после принятия стандарта PSR-3 (PHP Standard Recommendation) ваша свобода творчества была ограничена, и как вам диктовали какие методы должны быть в ваших классах.
Как заметили выше, есть не только E_NOTICE, но и E_STRICT и E_DEPRECATED. А ещё есть тонны устаревшего кода, который работает и который никто в здравом уме переписывать не будет. Зато будут обновлять версии пхп, дабы улучшить производительность или закрыть дыры в безопасности.

Главная особенность исключений в том, что они фатальны, если не перехвачены. Поэтому не получится просто взять и поменять старую систему ошибок на новую.

Если интересно, вот мнение расмуса на этот счёт.
О чем вы? Сам Silex по-сути и есть DIC
Вариант для PhpStorm ;)

/** @var $controllers \Silex\ControllerCollection */
$controllers = $app['controllers_factory'];
Что-то вы намудрили с моделями. Почему просто не прописать в секцию «autoload» путь к вашим моделям?

Либо сделать ещё проще:

    "autoload": {
        "psr-0": { "App": "src/" }
    },

Тогда создание модели сводится к:

$person = new \App\Model\Person();

И зачем передавать в модель весь контейнер $app? Лучше явно передавать все зависимости:

$person = new \App\Model\Person($app['db']);

Если у вас много моделей, можно сделать фабрику:

$app['models_factory'] = $app->protect(function ($modelName) {
    $fqcn = '\\App\\Model\\'.$modelName;
    return new $fqcn($app['db']);
});

Вызов:

$preson = $app['models_factory']('Person');

Хотя я предпочитаю явно всё прописывать, это позволяет «шарить» созданные объекты:

$app['repository.organization'] = $app->share(function() use ($app) {
    return new \App\Repository\OrganizationRepository($app['db']);
});

$app['repository.person'] = $app->share(function() use ($app) {
    return new \App\Repository\PersonRepository($app['db']);
});

...


P.S. Создавать ControllerCollection проще через фабрику, как рекомендуется в документации:

$controllers  = $app['controllers_factory'];
Просто в статье приведён неудачный пример.

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

if ($loggingEnabled) {
    $this->getLogger()->log('log message');
}

можно сделать эту проверку единожны при инициализации логгера:

$this->logger = $logger ?: new NullLogger();

и далее в коде просто писать

$this->logger->log('log message');

что, несомненно, выглядит чище и более соответствует принципу DRY.

Information

Rating
Does not participate
Location
Нидерланды
Date of birth
Registered
Activity