PHP

Материал из Artem Aleksashkin's Wiki
Версия от 21:37, 4 ноября 2024; Artem (обсуждение | вклад) (→‎Организация кода)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Общие сведения

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

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