Именованные аргументы, можно оставлять последную запятую,
Аннотации
Объявление свойств в конструкторе
Выражение matsh (новый вариант switch) - строгое сравнение
Новый оператор !== null => ?-> метод... null safe
# PHP (серерный язык)
> PHP - серверный скриптовой язык. Любой компоьютерный язык объясняет компьютеру что нужно на зыке программировани.
> Компилятор переводит текст в машинный код (бинарный код) в файл, который работает с "мозгами" компьютера.
> В PHP есть посредник между мозгами компютера. PHP - язык сценариев, который помещяет документ в поток вывода. Ответ программы состоит из заголовков.
## Особенности языка
В процессе работы скрипта есть уникальный идентификатор текущего процесса getmypid().
Весь вывод (echo) в браузер изначально помещяется (накапливается) в буфере, что бы их потом выдать (отправить) большой пачкой.
Если нужно перехватить вывод нужно использовать функцию ob_start() для перехвата стандартного выходного потока.
## Командная строка
```bash
$ echo PHP_PATH
$ php -v
$ php -m # список подключенных расширений (хранятся в папке) /ext/ -> .dll расширения (.so для Unix)
$ php -i | grep PDO
$ php -S localhost:4000 -t publuc_html # запустить встроенный виртуальный сервер
$ php --rf trim # справка по функции
$ php -h
```
## php.ini (файл настроек)
```apacheconf
extension=mysqli
extension=openssl
extension=pdo_mysql
max_execution_time = 300
max_input_time = 60
memory_limit = 128M
upload_max_filesize=16M
post_max_size=16M
```
## Типы данных
| | |
|----------------|-----------------------------------------------------------------------------------------------------------------------------------|
| & | жестка ссылка |
| $$ | символическая ссылка |
| integer (int) | |
| double (float) | |
| string | |
| array | list - целые ключи |
| boolean | TRUE (истина) / FALSE (ложь) |
| null | не математический "0" |
| resourse | |
| object | $obj - переменная всегда хранит не сам объект, а ссылку на него, для копирования объекта нужно пользоваться функцией clone |
| callable | $ переменная выступает в качестве функции обратного вызова (функция, которая в качестве аргумента может принимать другие функции) |
| mixed | смешанные типы данных (PHP 8) |
| void | для return - не возвращает ничего ценного |
### Особенности передачи в качестве аргументов класса или интерфейса
```php
// В качестве аргумента должен передаваться экземпляр класса типа Person
// Это напоминание прогрммисту о том, что в аргумент функции нужно передать объект типа Person
// Обычно параметры которые имеют значения по умолчанию добавляются в конец
public function methodExample(integer $arg1, Person $person): void
{
$result = '';
return ClassName; // Возвращает экземпляр класса
return $result;
}
```
### Предопределенные константы, переменные и встроенные классы (от которых мы можем наследоваться и использовать их методы)
| | |
|-------------------|-------------------------------------------------------------------------------|
| var $_GET | передача данных из браузера серверу (командная строка для сервера от клиента) |
| var $_POST | передача (загрузка) данных из браузера серверу (файлы через var $_FILES) |
| var $_SERVER | информация о сервере и среде исполнения |
| const \__FILE__ | |
| const \__LINE__ | |
| const \__CLASS__ | |
| const \__METHOD__ | |
| const PHP_EQL | |
| class Exception | |
| class Error | |
| class Closure* | обеспечивает работу замыканий |
**Замыкания** (анонимные функции, позволяют сохранять переменные на момент из вызова).
Замыкание это данный объект, переменные которые захватываются сохраняются именно в данном объекте.
По этой причине переменные не изменяются. Изменить состояние объекта можно при помощи bindTo().
### PHP7 (новое)
- define('DB',['USERNAME'=>'root']); // для констант можно задавать массивы
- declare(strict_types=1); // строгая типизация
- function arSum(array ...$arg): int "..." // передача неопределенного кол-ва аргументов в функцию
- function arSum(array ...$arg): int // декларация возвращяемого значения функцией
- <=> // новый оператор космический корабль
- ?? // новый оператор $user = $_GET['user'] ?? $_POST['user'] ?? 'guest'
### PHP8 (новое)
- Новая функция get_debug_type()
- Новый тип mixed
- Объединение типов (тип 1 | тип 2)
- ООП: в конструкторе можно писать в аргументах __constuct(public int $var)
- ООП: function() :static
- ООП: обращение "::class === get_class()"
- ООП: throw get_class(object)
- Выражение match (switch)
- Новые аннотации "#" // но пока без вложенных без мультистрок
- именованные аргументы
### Полезные пакеты
---
Если в двух трейтах содержится метод с одним и тем же именем, будет конфликт, его нужно разрешить
---
Интерфейсы реализуются
* Интерфейс - это проектирование публичной части (public), т.е. той, которую могут вызывать другие классы
это проектирование публичной части (public)
// Интерфейсов может быть несколько!!!
---
* Новый расширяемый класс примет все что есть с модификаторамии
* Все что у родителя(класс, метод) не подлежит наследованию и переопределению
* Принимаем все от родителя - в данном классе можем
* 1) Использовать существующие методы и свойства
* 2) Переопределить существующие методы и свойства (кроме)
* 3) Добавить (создать) новый
/**
* NAMESPACE(PSR 0, PSR 4, composer)
*
* Дублируют файловую структуру, являются стандартом автозагрузки классов
* Решают проблему изолированности кода. Код организуется в визуальные иерархии.
* Позволяют избежать конфликтов, если будут загружены классы с одинаковым именем.
* При ручном подключении нужно понимать, что за чем подключать (require_once()...)
* Для этих целей и существует пространство имен и autoloader...
*
* Классы подгружаются по мере необходимости
* Классы оформляются в виде отдельного файла
*
* 1) composer init
* 2)
* {
* "autoload": {
* "psr-4": {
* "Oop\\": "oop/"
* }
* },
* 3) composer update
* 4) require_once __DIR__ . '/../vendor/autoload.php';
*/
namespace Oop;

https://backendinterview.ru/
https://livetyping.com/ru/blog/chto-nuzhno-znat-i-umet-chtoby-rabotat-php-razrabotchikom
/interactive/content_wiki/backend.Php-id-2.md