....

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



PHP - серверный скриптовой язык. Любой компоьютерный язык объясняет компьютеру что нужно на зыке программировани. Компилятор переводит текст в машинный код (бинарный код) в файл, который работает с "мозгами" компьютера. В PHP есть посредник между мозгами компютера. PHP - язык сценариев, который помещяет документ в поток вывода. Ответ программы состоит из заголовков.

# -------------------------------------------------------------------
# Особенности языка
# -------------------------------------------------------------------
// В процессе работы скрипта есть уникальный идентификатор текущего процесса getmypid(). 
// Весь вывод (echo) в браузер изначально помещяется (накапливается) в буфере, что бы их потом выдать (отправить) большой пачкой. 
// Если нужно перехватить вывод нужно использовать функцию ob_start() для перехвата стандартного выходного потока.

- _GET -// передача данных из браузера серверу (командная строка для сервера от клиента)
- _POST // передача (загрузка) данных из браузера серверу
- _SERVER // информация о сервере и среде исполнения

# -------------------------------------------------------------------
# Командная строка
# -------------------------------------------------------------------
>> php -v
>> php -m // список подключенных расширений (хранятся в папке) /ext/ -> .dll расширения (.so для Unix)
>> php -S localhost:4000 -t publuc_html // запустить встроенный виртуальный сервер
>> php --rf trim // справка по функции
>> php -h

# -------------------------------------------------------------------
# php.ini (файл настроек)
# -------------------------------------------------------------------
- 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 // смешанные типы данных (PHP8)
- void // для return - не возвращает ничего ценного

// В качестве аргумента должен передаваться экземпляр класса типа Person
// Это напоминание прогрммисту о том, что в аргумент функции нужно передать объект типа Person
// Обычно параметры которые имеют значения по умолчанию добавляются в конец
public function methodExample(integer $arg1, Person $person): void
{
    $result = '';
    return ClassName; // Возвращает экземпляр класса
    return $result;
}

# -------------------------------------------------------------------
# Предопределенные (встроенные классы и константы)
# -------------------------------------------------------------------
// Существуют предопределенные (встроенные классы в PHP), от которых мы можем наследоваться и использовать их методы
- class Exception
- class Error
- class Closure - обеспечивает работу замыканий (анонимных функций, позволяя сохранять переменные на момент из вызова). 
// Замыкание это данный объект, переменные которые захватываются сохраняются именно в данном объекте.
// По этой причине переменные не изменяются. Изменить состояние объекта можно при помощи bindTo().

// Предопределенные константы
- __FILE__
- __LINE__
- __CLASS__
- __METHOD__
- PHP_EQL

# -------------------------------------------------------------------
# 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)
// Интерфейсов может быть несколько!!!

---

 * Новый расширяемый класс примет все что есть с модификаторами <public> и <protected>
 * Все что у родителя <fanel> (класс, метод) не подлежит наследованию и переопределению	
     * Принимаем все от родителя - в данном классе можем
     * 1) Использовать существующие методы и свойства
     * 2) Переопределить существующие методы и свойства (кроме <final>)
     * 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;

$ php -i | grep PDO
$ echo PHP_PATH

https://raw.githubusercontent.com/iv-litovchenko/maptex_content/master/php.txt































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