PHP: различия между версиями

Материал из Artem Aleksashkin's Wiki
Перейти к навигации Перейти к поиску
 
(не показано 29 промежуточных версий этого же участника)
Строка 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>
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.1
</pre>
Переключить версию PHP
<pre>
sudo update-alternatives --config php
# 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>
= История =
= История =
== 5.3 ==
== 5.3 ==
* http://php.net/manual/ru/migration53.php
* namespaces - http://php.net/manual/ru/language.namespaces.php
* namespaces - http://php.net/manual/ru/language.namespaces.php
* closures - http://php.net/manual/ru/functions.anonymous.php
* closures - http://php.net/manual/ru/functions.anonymous.php
Строка 11: Строка 67:


== 5.5 ==
== 5.5 ==
* http://php.net/manual/ru/migration55.php
* finally - http://php.net/manual/ru/language.exceptions.php
* finally - http://php.net/manual/ru/language.exceptions.php
* generators - http://php.net/manual/ru/language.generators.php
* generators - http://php.net/manual/ru/language.generators.php


== 5.6 ==
== 5.6 ==
* http://php.net/manual/ru/migration56.new-features.php
* variadic functions
* variadic functions
* argument unpacking
* argument unpacking
== 7.0 ==
== 7.0 ==
* http://php.net/manual/ru/migration70.php
* return types
* return types
* scalar typehints
* scalar typehints
== 7.1 ==
== 7.1 ==
* http://php.net/manual/ru/migration71.php
* const visibility
* const visibility
* nullables
* nullables
* multiple exceptions
* multiple exceptions
== 7.2 ==
== 7.2 ==
* http://php.net/manual/ru/migration72.php
* objects type hint
* objects type hint
* abstract function override
* abstract function override
== 7.3 ==
== 7.3 ==
* http://php.net/manual/ru/migration73.php
* references in list assignments
* references in list assignments
== 7.4 ==
* https://www.php.net/manual/ru/migration74.php
* Типизированные свойства
* Стрелочные функции
* Ограниченная ковариация возвращаемого типа и контравариантность типа аргумента
* Присваивающий оператор объединения с null
* Распаковка внутри массивов
* Разделитель в числовых литералах
* Слабые ссылки
* Обработка исключений из метода __toString()
== 8.0 ==
* https://www.php.net/releases/8.0/ru.php
== 8.1 ==
* https://www.php.net/releases/8.1/ru.php
== 8.2 ==
* https://www.php.net/releases/8.2/ru.php
== 8.3 ==
* https://www.php.net/releases/8.3/ru.php
= Паттерны =
* 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 =
<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/


= Установка =
= Синтаксис =
= ООП =
= IDE =
= Отладка =
= Отладка =
Проверить плагины можно функцией phpinfo(); - она выведет все параметры системы.
В консоли - php -i
= Организация кода =
= Организация кода =
* https://www.php-fig.org/psr/
= Библиотеки =
= Библиотеки =
= CMS =
* WordPress
* Drupal
* Joomla
* Livestreet
= Фреймворки =
* Symfony
* Laravel
* Zend Framework
* Yii
* CodeIgniter
* Nette Framework
* CakePHP
* Slim
= Ссылки и доп. информация =
= Ссылки и доп. информация =
* http://php.net

Текущая версия от 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

5.4

5.5

5.6

7.0

7.1

7.2

7.3

7.4

  • https://www.php.net/manual/ru/migration74.php
  • Типизированные свойства
  • Стрелочные функции
  • Ограниченная ковариация возвращаемого типа и контравариантность типа аргумента
  • Присваивающий оператор объединения с null
  • Распаковка внутри массивов
  • Разделитель в числовых литералах
  • Слабые ссылки
  • Обработка исключений из метода __toString()

8.0

8.1

8.2

8.3

Паттерны

Типы данных

  • 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

Ссылки и доп. информация