Skip to content

Instantly share code, notes, and snippets.

@1234ru
1234ru / traits-interfaces.md
Last active June 5, 2024 22:27
Про интерфейсы (interfaces) и трейты (traits) в PHP

Все методы, объявленные в интерфейсе, фактически являются абстрактными: все их необходимо явно определить в дочернем классе. То есть, описать какую-то универсальную логику с помощью интерфейса не получится.

При этом

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

Кроме того, в интерфейсах нельзя объявлять свойства. Можно только методы и константы.

@1234ru
1234ru / php-class-storing-default-settings.md
Last active May 9, 2024 14:35
Для хранения настроек по умолчанию можно использовать то же свойство объекта, которое будет их хранить
class SomeClass {
    private $settings = [
        'a' => 1,
        'b' => 2,
    ];

    function __construct($options)
    {
 $this->settings = array_replace_recursive(
@1234ru
1234ru / arrays-unpacking.md
Last active May 11, 2024 14:21
PHP: распаковка массивов при передаче функциям и слиянии массивов

Распаковку массивов можно использовать вместо array_merge():

$a = [ 1 ];
$b = [ 2 ];
// $c и $d ниже будут идентичны
$c = array_merge($a, $b, [3]);
$d = [ ...$a, ...$b, 3 ];
@1234ru
1234ru / symbolic-links-vs-direct-assignment-in-cycle.php
Last active March 28, 2024 21:44
Memory usage is unaffected by using a symbolic link instead of cyclic direct assignment
# This script should be run from one of .git/hooks files.
# Current directory will be .git
# git commands don't need directory be changed to
# project root.
# composer command does need.
export composer_exec="php ~/composer"
export command="git diff --name-only $oldrev $newrev -- composer.lock"
read oldrev newrev refname
export was_changed=$($command)
@1234ru
1234ru / misc.md
Last active September 13, 2023 23:42
Разное

mysqldump: записать только структуру БД

mysqldump some_db --no-data --compact > some_file.sql
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `some_table` (
@1234ru
1234ru / mysqlsh.md
Last active September 13, 2023 23:47
Заметки о MySQL Shell

Улучшенная по сравнению с mysql оболочка командной строки - mysqlsh.

https://dev.mysql.com/doc/mysql-shell/8.0/en/

В стандартный пакет сервера MySQL не входит, нужно загружать отдельно. Можно просто распаковать ZIP-архив и, при желании, прописать в PATH.

Соединение с сервером

@1234ru
1234ru / nginx-site-config-example.conf
Last active April 22, 2023 01:47
Пример директив конфигурации nginx для сайта
# $php_upstream должна быть определена в вышестоящей конфигурации
set $router /router.php;
location = /nginx.conf { return 404; }
location ^~ /.git { return 404; }
location ^~ /vendor { return 404; } # для Composer
location = /composer.json { return 404; }
location @router {
// IE11 friendly syntax
var _Local = _Local || {};
_Local.FIAS = function() {};
/**
* @typedef {Object} FIAS~fieldsConfigItem
* @property {string} type - $.fias.types.city|street|etc.
* @property {string|void} selector - input[name="street"]