PHP


Начало работы

hello.php

``php

Команда запуска PHP
``Основной сценарий
$ php hello.php

Переменные

``php $boolean1 = true; $boolean2 = True;

$int = 12; $float = 3.1415926; unset($float); // Удаление переменной

$str1 = “Как дела?”; $str2 = “Отлично, спасибо”;

См: [Types](#php-types)




### Строки
``php
$url = "cheatsheets.zip";
echo "Я изучаю PHP по адресу $url";

// Конкатенация строк
echo "Я изучаю PHP по адресу " . $url;

$hello = "Hello, ";
$hello .= "World!";
echo $hello; # => Hello, World!

См: Строки

Массивы

``php $num = [1, 3, 5, 7, 9]; $num[5] = 11; unset($num[2]); // Удаление переменной print_r($num); # => 1 3 7 9 11 echo count($num); # => 5

См: [Массивы](#php-arrays)



### Операторы
``php
$x = 1;
$y = 2;

$sum = $x + $y;
echo $sum; # => 3

См: Операторы

Включить

vars.php

``php

#### test.php
``php
<?php
включить 'vars.php';
echo $fruit . "\n"; # => яблоко

/* То же, что и include,
вызывать ошибку, если не может быть включена*/
require 'vars.php';

// Также работает
include('vars.php');
require('vars.php');

// Включение через HTTP
include 'http://x.com/file.php';

// Включение и оператор возврата
$result = include 'vars.php';
echo $result; # => Все, что угодно.
?>

Функции

``php function add($num1, $num2 = 1) { return $num1 + $num2; } echo add(10); # => 11 echo add(10, 5); # => 15

См: [Функции](#php-functions)




### Комментарии
``php
# Это однострочный комментарий в стиле shell

// Это однострочный комментарий в стиле c++

/* Это многострочный комментарий
   еще одна строка комментария */

Константы

``php const MY_CONST = “hello”;

echo MY_CONST; # => hello

=> MY_CONST is: hello

echo ‘MY_CONST is: ’ . MY_CONST;






### Классы
``php
класс Студент {
    public function __construct($name) {
        $this->name = $name;
    }
}
$alex = new Student("Alex");

См: Классы

Типы PHP

Boolean

``php $boolean1 = true; $boolean2 = TRUE; $boolean3 = false; $boolean4 = FALSE;

$boolean5 = (boolean) 1; # => true $boolean6 = (boolean) 0; # => false

Булевы выражения не чувствительны к регистру




### Integer {.row-span-2}
``php
$int1 = 28; # => 28
$int2 = -32; # => -32
$int3 = 012; # => 10 (восьмеричное)
$int4 = 0x0F; # => 15 (шестнадцатеричное)
$int5 = 0b101; # => 5 (двоичное)

# => 2000100000 (десятичная, PHP 7.4.0)
$int6 = 2_000_100_000;

См. также: Integers

Строки

``php echo ‘это простая строка’;

См: [Strings](#php-strings)

### Массивы
``php
$arr = array("hello", "world", "!");

См: Массивы

Float (Double)

``php $float1 = 1.234; $float2 = 1.2e7; $float3 = 7E-10;

$float4 = 1_234.567; // по состоянию на PHP 7.4.0 var_dump($float4); // float(1234.567)

$float5 = 1 + “10.5”; # => 11.5 $float6 = 1 + “-1.3e3”; # => -1299




### Null
```php
$a = null;
$b = 'Hello php!';
echo $a ?? 'a is unset'; # => a is unset
echo $b ?? 'b is unset'; # => Hello php

$a = array();
$a == null # => true
$a === null # => false
is_null($a) # => false

Iterables

``php function bar(): iterable { return [1, 2, 3]; } function gen(): iterable { yield 1; yield 2; yield 3; } foreach (bar() as $value) { echo $value; # => 123 }



Строки PHP
---------------



### Строка
``php
# => '$String'
$sgl_quotes = '$String';

# => 'Это $String'.
$dbl_quotes = "Это $sgl_quotes.";

# => символ табуляции.
$escaped = "\t символ табуляции.";

# => косая черта и буква "t": \t
$unescaped = 'косая черта и t: \t';

Многострочный

``php $str = “foo”;

// Неинтерполированные многострочники $nowdoc = «‘END’ Многострочная строка $str END;

// Выполнит интерполяцию строк $heredoc = «END Многострочный $str END;




### Манипуляции
``php
$s = "Hello Phper";
echo strlen($s); # => 11

echo substr($s, 0, 3); # => Hel
echo substr($s, 1); # => ello Phper
echo substr($s, -4, 3);# => hpe

echo strtoupper($s); # => HELLO PHPER
echo strtolower($s); # => hello phper

echo strpos($s, "l"); # => 2
var_dump(strpos($s, "L")); # => false

См: Строковые функции

Массивы PHP

Определение

``php $a1 = [“hello”, “world”, “!”] $a2 = array(“hello”, “world”, “!”); $a3 = explode(",", “apple,pear,peach”);

#### Смешанные ключи int и string
``php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
    100 => -100,
    -100 => 100,
);
var_dump($array);

Краткий синтаксис массива

``php $array = [ “foo” => “bar”, “bar” => “foo”, ];




### Мультимассив
```php
$multiArray = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

print_r($multiArray[0][0]) # => 1
print_r($multiArray[0][1]) # => 2
print_r($multiArray[0][2]) # => 3

Мультитип

$array = array(
    "foo" => "bar",
    42 => 24,
    "multi" => array(
         "dim" => array(
             "a" => "foo"
         )
    )
);

# => string(3) "bar"
var_dump($array["foo"]);

# => int(24)
var_dump($array[42]);

# => string(3) "foo"
var_dump($array["multi"]["dim"]["a"]);

манипуляция

$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // Добавление
$arr["x"] = 42; // Добавление с ключом
sort($arr); // Сортировка
unset($arr[5]); // Удалить
unset($arr); // Удалить все

См: Функции работы с массивами

Индексирование итерации

``php $array = array(‘a’, ‘b’, ‘c’); $count = count($array);

for ($i = 0; $i < $count; $i++) { echo “i:{$i}, v:{$array[$i]}\n”; }


### Итерация значений
``php
$colors = array('red', 'blue', 'green');

foreach ($colors as $color) {
    echo "Вам нравится $color?\n";
}

Ключевая итерация

$arr = ["foo" => "bar", "bar" => "foo"];

foreach ( $arr as $key => $value )
{
  	echo "key: " . $key . "\n";
    echo "val: {$arr[$key]}\n";
}

Конкатенация массивов

$a = [1, 2];
$b = [3, 4];

// PHP 7.4 later
# => [1, 2, 3, 4]
$result = [...$a, ...$b];

В функции

$array = [1, 2];

function foo(int $a, int $b) {
	echo $a; # => 1
  	echo $b; # => 2
}
foo(...$array);

Оператор Splat

``php function foo($first, …$other) { var_dump($first); # => a var_dump($other); # => [‘b’, ‘c’] } foo(‘a’, ‘b’, ‘c’ /, …/ ); // или function foo($first, string …$other){}




Операторы PHP {.cols-4}
---------------



### Арифметика
| - | - |
|------|----------------|
| `+` | Сложение |
| `-` | Вычитание |
| `*` | Умножение |
| `/` | Деление |
| `%` | Модуль |
| `**` | Экспонирование |

### Задание
| - | - |
|----------|---------------------|
| `a += b` | То же, что `a = a + b` |
| `a -= b` | То же, что `a = a - b` |
| `a *= b` | То же, что `a = a * b` |
| `a /= b` | То же, что `a = a / b` |
| `a %= b` | То же, что `a = a % b` |


### Сравнение {.row-span-2}
| - | - |
|-------|------------------------------|
| `==` | Equal |
| `===` | Одинаковые |
| `!=` | Не равно |
| `<>` | Не равны |
| `!==` | Не идентичны |
| `<` | Меньше |
| `>` | Больше |
| `<=` | Меньше или равно |
| `>=` | Больше или равно |
| `<=>` | Меньше/равнее/больше |

### Логические
| - | - |
|-------|--------------|
| `and` | And |
| `or` | Or |
| `xor` | Исключительное или |
| `!` | Не |
| `&&` | And |
| `||` | Or |




### Арифметика {.col-span-2}
``php
// Арифметика
$sum = 1 + 1; // 2
$difference = 2 - 1; // 1
$product = 2 * 2; // 4
$quotient = 2 / 1; // 2

// Сокращенная арифметика
$num = 0;
$num += 1; // Увеличение $num на 1
echo $num++; // Выводит 1 (увеличивается после оценки)
echo ++$num; // Выводит 3 (увеличивает до оценки)
$num /= $float; // Разделить и присвоить цитату $num

Побитовый

- -
& And
` `
^ Xor (исключающее или)
~ Не
<< Сдвиг влево
>> Сдвиг вправо

Условия PHP

If elseif else

``php $a = 10; $b = 20;

if ($a > $b) { echo “a больше, чем b”; } elseif ($a == $b) { echo “a равно b”; } else { echo “a меньше b”; }



### Переключатель
```php
$x = 0;
switch ($x) {
    case '0':
        print "it's zero";
        break;
    case '2':
    case '3':
        // сделайте что-нибудь
        break;
    default:
        // do something
}

Тернарный оператор

``php

=> Does

print (false ? ‘Not’ : ‘Does’);

$x = false;

=> Does

print($x ?: ‘Does’);

$a = null; $b = ‘Does print’;

=> a не задано

echo $a ?? ‘a is unset’;

=> печать

echo $b ?? ‘b is unset’;


### Match
```php
$statusCode = 500;
$message = match($statusCode) {
  200, 300 => null,
  400 => 'не найдено',
  500 => 'ошибка сервера',
  default => 'известный код состояния',
};
echo $message; # => ошибка сервера

См: Match

Соответствие выражений

``php $age = 23;

$result = match (true) { $age >= 65 => ‘senior’, $age >= 25 => “взрослый”, $age >= 18 => ‘young adult’, default => ‘kid’, };

echo $result; # => young adult



Циклы PHP
---------------


### while
``php
$i = 1;
# => 12345
while ($i <= 5) {
    echo $i++;
}

do while

$i = 1;
# => 12345
do {
    echo $i++;
} while ($i <= 5);

for i

# => 12345
for ($i = 1; $i <= 5; $i++) {
    echo $i;
}

break

``php

=> 123

for ($i = 1; $i <= 5; $i++) { if ($i === 4) { break; } echo $i; }


### continue
``php
# => 1235
for ($i = 1; $i <= 5; $i++) {
    if ($i === 4) {
        продолжить;
    }
    echo $i;
}

foreach

$a = ['foo' => 1, 'bar' => 2];
# => 12
foreach ($a as $k) {
    echo $k;
}

См: Итерация массива

Функции PHP

Возврат значений

``php function square($x) { return $x * $x; }

echo square(4); # => 16


### Возвращаемые типы
```php
// Базовое объявление возвращаемого типа
function sum($a, $b): float {/*...*/}
function get_item(): string {/*...*/}

class C {}
// Возвращение объекта
function getC(): C { return new C; }

Нулевые возвращаемые типы

``php // Доступно в PHP 7.1 function nullOrString(int $v) : ?string { return $v % 2 ? “odd” : null; } echo nullOrString(3); # => odd var_dump(nullOrString(4)); # => NULL

См: [Nullable types](https://www.php.net/manual/en/migration71.new-features.php)

### Функции Void
``php
// Доступно в PHP 7.1
функция voidFunction(): void
{
	echo 'Hello';
	return;
}

voidFunction(); # => Hello

Функции переменных

``php function bar($arg = ‘’) { echo “В bar(); arg: ‘$arg’.\n’; }

$func = ‘bar’; $func(’test’); # => In bar(); arg: test






### Анонимные функции
``php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World'); # => Hello World
$greet('PHP'); # => Hello PHP

Рекурсивные функции

``php function recursion($x) { if ($x < 5) { echo “$x”; recursion($x + 1); } } recursion(1); # => 1234




### Параметры по умолчанию
``php
function coffee($type = "cappuccino")
{
    return "Делаем чашку кофе $type.\n";
}
# => Делаем чашку капучино.
echo coffee();
# => Делаем чашку .
echo coffee(null);
# => Приготовление чашки эспрессо.
echo coffee("espresso");

Функции стрелок

``php $y = 1;

$fn1 = fn($x) => $x + $y;

// эквивалентно использованию $y по значению: $fn2 = function ($x) use ($y) { return $x + $y; }; echo $fn1(5); # => 6 echo $fn2(5); # => 6





Классы PHP
---------------


### Конструктор
``php
class Student {
    public function __construct($name) {
        $this->name = $name;
    }
  	public function print() {
        echo "Имя: " . $this->name;
    }
}
$alex = new Student("Alex");
$alex->print(); # => Имя: Алекс

Наследование

``php class ExtendClass extends SimpleClass { // Переопределяем родительский метод function displayVar() { echo “Расширение класса\n”; parent::displayVar(); } }

$extended = new ExtendClass(); $extended->displayVar();


### Переменные класса {.row-span-2}
``php
class MyClass
{
    const MY_CONST = 'value';
    static $staticVar = 'static';

    // Видимость
    public static $var1 = 'pubs';

    // Только класс
    private static $var2 = 'pris';

    // Класс и подклассы
    protected static $var3 = 'pros';

    // Класс и подклассы
    protected $var6 = 'pro';

    // Только класс
    private $var7 = 'pri';
}

Доступ статически ``php echo MyClass::MY_CONST; # => значение echo MyClass::$staticVar; # => static




### Магические методы
``php
класс MyClass
{
    // Объект рассматривается как строка
    public function __toString()
    {
        return $property;
    }
    // противоположность функции __construct()
    public function __destruct()
    {
        print "Destroying";
    }
}

Интерфейс

``php интерфейс Foo { public function doSomething(); } интерфейс Bar { public function doSomethingElse(); } class Cls implements Foo, Bar { public function doSomething() {} public function doSomethingElse() {} }


Разное
-------------

### Базовая обработка ошибок
``php
try {
    // Делаем что-нибудь
} catch (Exception $e) {
    // Обработка исключения
} finally {
    echo "Всегда печатайте!";
}

Исключение в PHP 8.0

``php {.wrap} $nullableValue = null;

try { $value = $nullableValue ?? throw new InvalidArgumentException(); } catch (InvalidArgumentException) { // Переменная необязательна // Обработка моего исключения echo “print me!”; }


### Пользовательское исключение {.row-span-2}
``php
class MyException extends Exception {
    // сделать что-нибудь
}

Использование ``php try { $condition = true; if ($condition) { throw new MyException(‘bala’); } } catch (MyException $e) { // Обработка моего исключения }


### Nullsafe Operator {.row-span-2}
``php
// Начиная с версии PHP 8.0.0, эта строка:
$result = $repo?->getUser(5)?->name;

// Эквивалентно следующему коду:
if (is_null($repo)) {
    $result = null;
} else {
    $user = $repository->getUser(5);
    if (is_null($user)) {
        $result = null;
    } else {
        $result = $user->name;
    }
}

См. также: Nullsafe Operator

Регулярные выражения

``php $str = “Посетите сайт Quickref.me”; echo preg_match("/qu/i”, $str); # => 1

См: [Regex в PHP](/regex#regex-in-php)

### режим fopen()

| - | - |
|------|--------------------------|
| `r` | Чтение |
| `r+` | Чтение и запись, добавление |
| `w` | Запись, усечение |
| `w+` | Чтение и запись, усечение |
| `a` | Запись, добавление |
| `a+` | Чтение и запись, добавление |



### Константы, определяемые временем выполнения
``php
define("CURRENT_DATE", date('Y-m-d'));

// Одно из возможных представлений
echo CURRENT_DATE; # => 2021-01-05

# => CURRENT_DATE is: 2021-01-05
echo 'CURRENT_DATE is: ' . CURRENT_DATE;

Также см.