PHP (серерная часть)



Именованные аргументы, можно оставлять последную запятую,
Аннотации
Объявление свойств в конструкторе
Выражение 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://raw.githubusercontent.com/iv-litovchenko/WebNote/main/Uploads/TEMP.jpg)
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






































Здесь можно оставить комментарий!