PHP const vs static

Часто стал замечать во время ревью, что некоторые (да я и сам давно) путают static и const, считая что, то и то — константы. Увы это не так.

static — Это статическое свойство класса, которое может быть вызвано без создания экземпляра(объекта) класса. То есть обратиться мы к нему сможем через:

<?php

class Foo {
    static $var = 10;
}

echo Foo::$var;

Так же данное свойство можно будет переопределить. По умолчанию static is public

const — Это константа класса, которая может быть вызвана только через класс. Не может быть переопределена. Так же по умолчанию public

О типизации в php 7.4

Теперь можно будет так:

<?php
class User {
    public int $id;
    public string $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}
<?php
class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }

    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }

    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
}

В пример все типы:

<?php
class Example {
    // All types with the exception of "void" and "callable" are supported
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;

    // Types are also legal on static properties
    public static iterable $staticProp;

    // Types can also be used with the "var" notation
    var bool $flag;

    // Typed properties may have default values (more below)
    public string $str = "foo";
    public ?string $nullableStr = null;

    // The type applies to all properties in one declaration
    public float $x, $y;
    // equivalent to:
    public float $x;
    public float $y;
}

Источник: https://wiki.php.net/rfc/typed_properties_v2

PHP Russia 2019 ElisDN

Про UseCase, фреймворки и в целом ООП.

ООП следует использовать по максимуму. К примеру объекты не использовать как ActiveRecord для связки с таблицой в БД, а полноценно с входящими в конструктор объектами Content, Price, etc.

new Lot($id, $var1, $var2, $title, $content, $blitzPrice, $startPrice)  // half solid
new Lot($id, $var1, $var2, new Content($title, $content), new Price($startPrice, $blitzPrice)) // full solid

Laravel Multilang

Добавили автоматические роуты для интернационализации.

Было:

Route::get('/', 'ShowHomeController')->name('en.home');
Route::get('/fr', 'ShowHomeController')->name('fr.home');

Стало:

Route::multilingual('/', 'ShowHomeController')->name('home');

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

protected $middlewareGroups = [
    'web' => [
        \ChinLeung\LaravelMultilingualRoutes\DetectRequestLocale::class,
        // ...
    ]
];

Пример конфигурации:

// config/locales.php
'supported' => [
    'en',
    'es',
    'fr',
],

Пакет GitHub

Laravel Horizon

Познакомился недавно с laravel horizon, очень прикольная, а главное полезная штука для моих проектов.

Некое управление джобами и очередями в лаврухе с удобной админой со всякой метрикой и управлением джобами.

Не буду пересказывать вам что оно из себя представляет т.к. в официальной доке все написано, НО столкнулся с проблемой, что у меня были очень долги джобы связанные с запросами на сторонние сервисы для сбора большой информации и поэтому джоба часто улетала в тайм аут . Вы скажете почему ты ее не разобьешь на еще другие джобы, но это не решит проблему, вообщем после серфинга и перебора кучи документации узнал про флаг —timeout я думаю обьяснять зачем не стоит, так как тут все понятно 🙂 (не знаю как обьяснить 😀 )

Вообщем поставил на 0 и все работало как надо

В horizon так не сработало, так как он работает только с redis, а до этого у меня были очереди через database коннектор, поэтому после долгих мучений, проб и ошибок , было выяснено что в конфиге очередей, а именно в коннекторе redis, есть флаг retry_after, который то и отвечал за переконнект.

Короче поставил таумаут 0, а ретрай больше. Вроде сработало и работает. Будем смотреть что будет дальше

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

Laravel helpers

О очень обожаемом нашем фреймворке Laravel имеются вспомогательные функции.

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, $replace = '');

Пригодится для обрезки строки.

$plural = Str::plural('car', 123); //cars
$singular = Str::singular('cars'); // car

Преобразование в многочисленный род и наоборот в ед.

$slug = Str::slug('Laravel 5 Framework', '-');

Для урлов

Laravel SQL команды миграций в файл.

Иногда возникает проблемы деплоя на продакшен не через git как мы все привыкали, а через ftp, но как быть с миграции, когда хостинг самый дешевый и вызвать миграции способом php artisan migrate не вариант, то следующая команда вам поможет.

php artisan migrate --pretend > migrations.sql