Скалярные: bool (логический тип), int (целые числа), float (дробные числа), string (строки)
Смешанные: array (массивы), object (объекты), enum (PHP8.1)
Специальные типы: null ("пустой" тип), resource (ресурсы)
Псевдотипы: Iterable, mixed (любой тип PHP8), callable (функции)

xdebug, логи, dd или echo, debug_backtrace (есть риски его использования в случае с длинными трейсами и отказе логов сентри и сети)

private - Видна только в своем собственном классе
public - Видна для любого другого кода, осуществляющего доступ к классу
protected - Видна только родительских классов и классов, которые расширяют текущий класс
По дефолту все методы должны быть private - если специально не предусмотрено иного.

PSR-1 - Basic Coding Standard
PSR-12 - Extended Coding Style Guide
PSR-4 — Autoloading Standard
PSR-3 - Logger Interface
PSR-6 - Caching Interface
PSR-7 - HTTP Message Interfaces
PSR-11 - Container Interface
PSR-14 - Event Dispatcher
PSR-15 - HTTP Handlers
PSR-16 - Simple Cache

Менеджер пакетов для управления зависимостями
Composer update создаст новый composer.lock файл и проапдейтит где возможно до последних версий в соответствии с composer.json.
Composer install не будет менять composer.lock и апдейтить версии - просто установит то что уже есть в composer.lock.

$this - указывает на текущий объект
self - всегда указывает на тот класс в котором функция объявлена
static - на тот класс от которого вызывается, реализуя позднее статическое связывание

in_array имеет сложность O(N)
Для больших массивов лучше собрать хэшмап и проверять array_key_exists, сложность в среднем O(1) в подготовленном массиве.

Массивы передаются по значению, но чтоб избежать копирований больших кусков памяти, копирование происходит только при попытке изменения массива

Count лежит в структуре массива, по этому сложность O(1)

Псевдотип, который может содержать в себе заданный код функции, они же анонимные функции.
Может быть строкой ('ClassName::method', 'in_array'), массивом ([Foo::class, 'bar']) или кодом.

Классифицированные ошибки. Поймать исключение можно при помощи catch.
Так же в конструкции есть блок finally, который выполниться всегда, не зависимо от того было ли выброшено исключение.
Исключения можно наследовать и переопределять. Можно наследовать исключения от интерфейсов и перехватывать по ним.
Исключения по ошибки памяти невозможно отловить.

Анонимные функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определённых имён.
Замыкание инкапсулированную область видимости. Передать значение в замыкание можно через конструкцию use.