PHP: различия между версиями
Перейти к навигации
Перейти к поиску
Artem (обсуждение | вклад) (→7.3) |
Artem (обсуждение | вклад) |
||
(не показано 15 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
= Общие сведения = | = Общие сведения = | ||
PHP: Hypertext Preprocessor - интерпретируемый язык программирования, который завоевал популярность благодаря легкой интеграции с HTML позволяя вставлять блоки кода <?php echo $someVar; ?> прямо в html код. Сейчас правда от такого отказались большинство движков и используют шаблоны и всякие паттерны. | |||
= Установка = | = Установка = | ||
Официальные версии PHP в Ubuntu. если вы не доверяете сторонним репозиториям, то можно взять за основу докер образа соответствующую версию ос | |||
{| class="wikitable" | |||
|- | |||
! Ubuntu !! 14.04 !! 16.04 !! 18.04 !! 20.04 !! 22.04 !! 24.04 | |||
|- | |||
| PHP || 5.5.9 || 7.0.33 || 7.2.24 || 7.4.3 || 8.1.2 || 8.3.6 | |||
|} | |||
<pre> | <pre> | ||
sudo add-apt-repository ppa:ondrej/php | sudo add-apt-repository ppa:ondrej/php | ||
Строка 12: | Строка 25: | ||
sudo update-alternatives --config php | sudo update-alternatives --config php | ||
# OR sudo update-alternatives --set php /usr/bin/php5.6 | # OR sudo update-alternatives --set php /usr/bin/php5.6 | ||
</pre> | |||
Переделать все ссылки в php config | |||
<pre> | |||
cd /etc/php/8.1/fpm/conf.d | |||
for i in `ls -1`; do id=`echo $i|awk -F\- '{print $1}'; `;name=`echo $i|awk -F\- '{print $2}'`;rm $i;ln -s ../../mods-available/$name $i;done; | |||
cd /etc/php/8.1/cli/conf.d | |||
for i in `ls -1`; do id=`echo $i|awk -F\- '{print $1}'; `;name=`echo $i|awk -F\- '{print $2}'`;rm $i;ln -s ../../mods-available/$name $i;done; | |||
</pre> | |||
= Менеджер зависимостей = | |||
Обычно используется Composer https://getcomposer.org/ | |||
Всегда ставьте конкретную версию | |||
<pre> | |||
sudo wget -O /usr/local/bin/composer https://getcomposer.org/download/2.5.1/composer.phar | |||
sudo chmod +x /usr/local/bin/composer | |||
</pre> | |||
OR some old version | |||
<pre> | |||
sudo wget -O /usr/local/bin/composer https://getcomposer.org/download/1.9.3/composer.phar | |||
sudo chmod +x /usr/local/bin/composer | |||
</pre> | </pre> | ||
Строка 84: | Строка 125: | ||
= Типы данных = | = Типы данных = | ||
* null | |||
** Скалярные: | |||
** bool | |||
** int | |||
** float | |||
** string | |||
* array | |||
* object | |||
* resource | |||
* never | |||
* void | |||
* self, parent, static | |||
* true, false | |||
= Магические методы = | = Магические методы = | ||
* '''__construct(mixed ...$values = ""): void''' - конструктор, вызывается при new ClassName($param1, $param2, $param3) | |||
* '''__destruct()''' - деструктор - вызывается при уничтожении объекта | |||
* '''__call(string $name, array $arguments): mixed''' - вызывается при вызове метода с параметрами | |||
* '''__callStatic(string $name, array $arguments): mixed''' - вызывается при вызове статического метода с параметрами | |||
* '''__get(string $name): mixed''' - будет выполнен при чтении данных из недоступных (защищённых или приватных) или несуществующих свойств. | |||
* '''__set(string $name, mixed $value): void''' - будет выполнен при записи данных в недоступные (защищённые или приватные) или несуществующие свойства. | |||
* '''__isset(string $name): bool''' - будет выполнен при использовании isset() или empty() на недоступных (защищённых или приватных) или несуществующих свойствах. | |||
* '''__unset(string $name): void''' - будет выполнен при вызове unset() на недоступном (защищённом или приватном) или несуществующем свойстве. | |||
* '''__sleep(): array''' - Если метод определили, он выполняется перед сериализацией. Метод может очистить объект и должен вернуть массив с именами всех переменных этого объекта, которые должны быть сериализованы. Если метод ничего не возвращает, то сериализуется константа null и выдаётся предупреждение E_NOTICE. | |||
* '''__wakeup(): void''' - восстановить соединения с базой данных, которые могли потеряться во время сериализации, и выполнить другие задачи повторной инициализации. | |||
* '''__serialize(): array''' - Если метод определили, функция выполняется перед сериализацией. Метод должен создать и вернуть ассоциативный массив пар ключ и значение, которые представляют сериализованную форму объекта. | |||
* '''__unserialize(array $data): void''' - Если метод определили, PHP передаст методу массив, который восстановил и вернул метод __serialize(). Затем, если нужно, метод восстанавливает свойства объекта из этого массива. | |||
* '''__toString(): string''' - разрешает классу выбирать, как класс будет реагировать, когда с ним обращаются как со строкой. | |||
* '''__invoke( ...$values): mixed''' - вызывается, когда скрипт пытается выполнить объект как функцию. | |||
* '''__set_state(array $properties): object''' - Этот статический метод вызывается для тех классов, которые экспортируются функцией var_export(). | |||
* '''__clone(): void''' - После завершения клонирования, если метод __clone() определён, то будет вызван метод __clone() вновь созданного объекта для возможного изменения всех необходимых свойств. | |||
* '''__debugInfo(): array''' - Этот метод вызывается функцией var_dump(), когда необходимо вывести список свойств объекта. Если этот метод не определили, выводится каждое свойство объекта c модификаторами public, protected и private | |||
= Суперглобальные переменные = | = Суперглобальные переменные = | ||
* '''$GLOBALS''' - Ссылается на переменные глобальной области видимости | |||
* '''$_SERVER''' - это массив (array), содержащий такую информацию, как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером, поэтому нет гарантии, что каждый веб-сервер будет предоставлять любую из этих переменных | |||
* '''$_GET''' - Ассоциативный массив переменных, переданных скрипту через параметры URL (известные также как строка запроса). | |||
* '''$_POST''' - Ассоциативный массив данных, переданных скрипту через HTTP методом POST при использовании application/x-www-form-urlencoded или multipart/form-data в заголовке Content-Type запроса HTTP. | |||
* '''$_FILES''' - Ассоциативный массив элементов, загруженных в текущий скрипт через метод HTTP POST. | |||
* '''$_COOKIE''' - Ассоциативный массив значений, переданных скрипту через HTTP Cookies. | |||
* '''$_SESSION''' - Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта. | |||
* '''$_REQUEST''' - Ассоциативный массив, который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE. | |||
* '''$_ENV''' - Ассоциативный массив значений, переданных скрипту через переменные окружения. | |||
= Spread Operator = | |||
<pre> | |||
$arr1 = [1, 2, 3]; | |||
$arr2 = [...$arr1]; // [1, 2, 3] | |||
$arr3 = [0, ...$arr1]; // [0, 1, 2, 3] | |||
// слияние нескольких массивов | |||
$arr4 = array(...$arr1, ...$arr2, 111); // [1, 2, 3, 1, 2, 3, 111] | |||
$arr5 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3] | |||
function getArr() { | |||
return ['a', 'b']; | |||
} | |||
$arr6 = [...getArr(), 'c']; // ['a', 'b', 'c'] | |||
// с использованием итератора массива | |||
$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c'] | |||
function arrGen() { | |||
for($i = 11; $i < 15; $i++) { | |||
yield $i; | |||
} | |||
} | |||
// с использованием генератора | |||
$arr8 = [...arrGen()]; // [11, 12, 13, 14] | |||
</pre> | |||
= Garbage Collector = | |||
* https://www.php.net/manual/en/features.gc.php | |||
* https://habr.com/ru/articles/748352/ | |||
= Отладка = | = Отладка = | ||
Проверить плагины можно функцией phpinfo(); - она выведет все параметры системы. | |||
В консоли - php -i | |||
= Организация кода = | = Организация кода = | ||
* https://www.php-fig.org/psr/ | |||
= Библиотеки = | = Библиотеки = | ||
= CMS = | = CMS = |
Текущая версия от 21:37, 4 ноября 2024
Общие сведения
PHP: Hypertext Preprocessor - интерпретируемый язык программирования, который завоевал популярность благодаря легкой интеграции с HTML позволяя вставлять блоки кода <?php echo $someVar; ?> прямо в html код. Сейчас правда от такого отказались большинство движков и используют шаблоны и всякие паттерны.
Установка
Официальные версии PHP в Ubuntu. если вы не доверяете сторонним репозиториям, то можно взять за основу докер образа соответствующую версию ос
Ubuntu | 14.04 | 16.04 | 18.04 | 20.04 | 22.04 | 24.04 |
---|---|---|---|---|---|---|
PHP | 5.5.9 | 7.0.33 | 7.2.24 | 7.4.3 | 8.1.2 | 8.3.6 |
sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install php8.1
Переключить версию PHP
sudo update-alternatives --config php # OR sudo update-alternatives --set php /usr/bin/php5.6
Переделать все ссылки в php config
cd /etc/php/8.1/fpm/conf.d for i in `ls -1`; do id=`echo $i|awk -F\- '{print $1}'; `;name=`echo $i|awk -F\- '{print $2}'`;rm $i;ln -s ../../mods-available/$name $i;done; cd /etc/php/8.1/cli/conf.d for i in `ls -1`; do id=`echo $i|awk -F\- '{print $1}'; `;name=`echo $i|awk -F\- '{print $2}'`;rm $i;ln -s ../../mods-available/$name $i;done;
Менеджер зависимостей
Обычно используется Composer https://getcomposer.org/
Всегда ставьте конкретную версию
sudo wget -O /usr/local/bin/composer https://getcomposer.org/download/2.5.1/composer.phar sudo chmod +x /usr/local/bin/composer
OR some old version
sudo wget -O /usr/local/bin/composer https://getcomposer.org/download/1.9.3/composer.phar sudo chmod +x /usr/local/bin/composer
История
5.3
- http://php.net/manual/ru/migration53.php
- namespaces - http://php.net/manual/ru/language.namespaces.php
- closures - http://php.net/manual/ru/functions.anonymous.php
5.4
- http://php.net/manual/ru/migration54.new-features.php
- traits - http://php.net/manual/ru/language.oop5.traits.php
- short array syntax
5.5
- http://php.net/manual/ru/migration55.php
- finally - http://php.net/manual/ru/language.exceptions.php
- generators - http://php.net/manual/ru/language.generators.php
5.6
- http://php.net/manual/ru/migration56.new-features.php
- variadic functions
- argument unpacking
7.0
- http://php.net/manual/ru/migration70.php
- return types
- scalar typehints
7.1
- http://php.net/manual/ru/migration71.php
- const visibility
- nullables
- multiple exceptions
7.2
- http://php.net/manual/ru/migration72.php
- objects type hint
- abstract function override
7.3
- http://php.net/manual/ru/migration73.php
- references in list assignments
7.4
- https://www.php.net/manual/ru/migration74.php
- Типизированные свойства
- Стрелочные функции
- Ограниченная ковариация возвращаемого типа и контравариантность типа аргумента
- Присваивающий оператор объединения с null
- Распаковка внутри массивов
- Разделитель в числовых литералах
- Слабые ссылки
- Обработка исключений из метода __toString()
8.0
8.1
8.2
8.3
Паттерны
- https://designpatternsphp.readthedocs.io/en/latest/README.html
- https://refactoring.guru/ru/design-patterns
- https://www.php.net/spl
Типы данных
- null
- Скалярные:
- bool
- int
- float
- string
- array
- object
- resource
- never
- void
- self, parent, static
- true, false
Магические методы
- __construct(mixed ...$values = ""): void - конструктор, вызывается при new ClassName($param1, $param2, $param3)
- __destruct() - деструктор - вызывается при уничтожении объекта
- __call(string $name, array $arguments): mixed - вызывается при вызове метода с параметрами
- __callStatic(string $name, array $arguments): mixed - вызывается при вызове статического метода с параметрами
- __get(string $name): mixed - будет выполнен при чтении данных из недоступных (защищённых или приватных) или несуществующих свойств.
- __set(string $name, mixed $value): void - будет выполнен при записи данных в недоступные (защищённые или приватные) или несуществующие свойства.
- __isset(string $name): bool - будет выполнен при использовании isset() или empty() на недоступных (защищённых или приватных) или несуществующих свойствах.
- __unset(string $name): void - будет выполнен при вызове unset() на недоступном (защищённом или приватном) или несуществующем свойстве.
- __sleep(): array - Если метод определили, он выполняется перед сериализацией. Метод может очистить объект и должен вернуть массив с именами всех переменных этого объекта, которые должны быть сериализованы. Если метод ничего не возвращает, то сериализуется константа null и выдаётся предупреждение E_NOTICE.
- __wakeup(): void - восстановить соединения с базой данных, которые могли потеряться во время сериализации, и выполнить другие задачи повторной инициализации.
- __serialize(): array - Если метод определили, функция выполняется перед сериализацией. Метод должен создать и вернуть ассоциативный массив пар ключ и значение, которые представляют сериализованную форму объекта.
- __unserialize(array $data): void - Если метод определили, PHP передаст методу массив, который восстановил и вернул метод __serialize(). Затем, если нужно, метод восстанавливает свойства объекта из этого массива.
- __toString(): string - разрешает классу выбирать, как класс будет реагировать, когда с ним обращаются как со строкой.
- __invoke( ...$values): mixed - вызывается, когда скрипт пытается выполнить объект как функцию.
- __set_state(array $properties): object - Этот статический метод вызывается для тех классов, которые экспортируются функцией var_export().
- __clone(): void - После завершения клонирования, если метод __clone() определён, то будет вызван метод __clone() вновь созданного объекта для возможного изменения всех необходимых свойств.
- __debugInfo(): array - Этот метод вызывается функцией var_dump(), когда необходимо вывести список свойств объекта. Если этот метод не определили, выводится каждое свойство объекта c модификаторами public, protected и private
Суперглобальные переменные
- $GLOBALS - Ссылается на переменные глобальной области видимости
- $_SERVER - это массив (array), содержащий такую информацию, как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером, поэтому нет гарантии, что каждый веб-сервер будет предоставлять любую из этих переменных
- $_GET - Ассоциативный массив переменных, переданных скрипту через параметры URL (известные также как строка запроса).
- $_POST - Ассоциативный массив данных, переданных скрипту через HTTP методом POST при использовании application/x-www-form-urlencoded или multipart/form-data в заголовке Content-Type запроса HTTP.
- $_FILES - Ассоциативный массив элементов, загруженных в текущий скрипт через метод HTTP POST.
- $_COOKIE - Ассоциативный массив значений, переданных скрипту через HTTP Cookies.
- $_SESSION - Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта.
- $_REQUEST - Ассоциативный массив, который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
- $_ENV - Ассоциативный массив значений, переданных скрипту через переменные окружения.
Spread Operator
$arr1 = [1, 2, 3]; $arr2 = [...$arr1]; // [1, 2, 3] $arr3 = [0, ...$arr1]; // [0, 1, 2, 3] // слияние нескольких массивов $arr4 = array(...$arr1, ...$arr2, 111); // [1, 2, 3, 1, 2, 3, 111] $arr5 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3] function getArr() { return ['a', 'b']; } $arr6 = [...getArr(), 'c']; // ['a', 'b', 'c'] // с использованием итератора массива $arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c'] function arrGen() { for($i = 11; $i < 15; $i++) { yield $i; } } // с использованием генератора $arr8 = [...arrGen()]; // [11, 12, 13, 14]
Garbage Collector
Отладка
Проверить плагины можно функцией phpinfo(); - она выведет все параметры системы.
В консоли - php -i
Организация кода
Библиотеки
CMS
- WordPress
- Drupal
- Joomla
- Livestreet
Фреймворки
- Symfony
- Laravel
- Zend Framework
- Yii
- CodeIgniter
- Nette Framework
- CakePHP
- Slim