Справка - Что означает этот символ в PHP?

Что это?

Это набор вопросов, которые время от времени возникают о синтаксисе в PHP. Это также Вики Сообщества, поэтому каждый приглашен принять участие в ведении этого списка.

Почему это?

Раньше было сложно найти вопросы об операторах и других синтаксических токенах.
Основная идея состоит в том, чтобы иметь ссылки на существующие вопросы по переполнению стека, чтобы нам было легче ссылаться на них, а не копировать содержимое из руководства по PHP.

Примечание. С января 2013 года переполнение стека поддерживает специальные символы. Просто окружите условия поиска кавычками, например [php] "==" vs "==="

Что мне здесь делать?

Если кто-то указал на вас кем-то, потому что вы задали такой вопрос, пожалуйста, найдите конкретный синтаксис ниже. Связанные страницы с руководством по PHP вместе со связанными вопросами, скорее всего, ответят на ваш вопрос. Если это так, вам предлагается поднять ответ. Этот список не является заменой помощи, оказанной другими.

Список

Если ваш конкретный токен не указан ниже, вы можете найти его в списке токенов парсера.


& Битовые операторы или ссылки


=& Рекомендации


&= Битовые операторы


&& Логические Операторы


% Арифметические Операторы


!! Логические Операторы


@ Операторы контроля ошибок


?: Троичный оператор


?? Нулевой оператор объединения (начиная с PHP 7)


?string?int?array?bool?float Обнуляемое объявление типа возврата (начиная с PHP 7.1)


: Альтернативный синтаксис для структур управления, Тернарный оператор


:: Оператор разрешения области


\ Пространства имен


-> Классы И Объекты


=> Массивы


^ Битовые операторы


>> Битовые операторы


<< Битовые операторы


<<< Эредок или Новдок


= Операторы присваивания


== Операторы сравнения


=== Операторы сравнения


!== Операторы сравнения


!= Операторы сравнения


<> Операторы сравнения


<=> Операторы сравнения (начиная с PHP 7.0)


| Битовые операторы


|| Логические Операторы


~ Битовые операторы


+ Арифметические операторы, операторы массивов


+= а также -= Операторы присваивания


++ а также -- Увеличение / Уменьшение Операторов


.= Операторы присваивания


. Строковые операторы


, Аргументы функции

, Объявления переменных


$$ Переменные Переменные


` Оператор исполнения


<?= Короткие открытые теги


[] Массивы (короткий синтаксис начиная с PHP 5.4)


<? Открытие и закрытие тегов


... Распаковка аргумента (начиная с PHP 5.6)


** Экспонирование (начиная с PHP 5.6)


# Однострочный комментарий в стиле оболочки


:? Обнуляемые типы возврата


28 ответов

Решение

Увеличение / Уменьшение Операторов

++ оператор приращения

-- оператор декремента

Example    Name              Effect
---------------------------------------------------------------------
++$a       Pre-increment     Increments $a by one, then returns $a.
$a++       Post-increment    Returns $a, then increments $a by one.
--$a       Pre-decrement     Decrements $a by one, then returns $a.
$a--       Post-decrement    Returns $a, then decrements $a by one.

Они могут идти до или после переменной.

Если поставить перед переменной, операция увеличения / уменьшения выполняется сначала для переменной, а затем возвращается результат. Если поставить после переменной, переменная сначала возвращается, затем выполняется операция увеличения / уменьшения.

Например:

$apples = 10;
for ($i = 0; $i < 10; ++$i) {
    echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}

Живой пример

В случае выше ++$i используется, так как это быстрее. $i++ будет иметь такие же результаты.

Предварительное увеличение немного быстрее, потому что оно действительно увеличивает переменную и после этого "возвращает" результат. Постинкремент создает специальную переменную, копирует туда значение первой переменной и только после того, как первая переменная используется, заменяет ее значение на второе.

Тем не менее, вы должны использовать $apples--, так как сначала вы хотите отобразить текущее количество яблок, а затем вы хотите вычесть одно из них.

Вы также можете увеличивать буквы в PHP:

$i = "a";
while ($i < "c") {
    echo $i++;
}

однажды z достигнут aa рядом и так далее.

Обратите внимание, что символьные переменные можно увеличивать, но не уменьшать, и даже в этом случае поддерживаются только простые символы ASCII (az и AZ).


Сообщения переполнения стека:

Побитовый оператор

Что немного? Бит представляет собой 1 или 0. В основном OFF(0) и ON(1)

Что такое байт? Байт состоит из 8 битов, а наибольшее значение байта составляет 255, что означает, что установлен каждый бит. Посмотрим, почему максимальное значение байта равно 255.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------

Это представление 1 байт

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 (1 байт)

Несколько примеров для лучшего понимания

Оператор "И": &

$a =  9;
$b = 10;
echo $a & $b;

Это вывело бы число 8. Почему? Хорошо, давайте посмотрим на нашем примере таблицы.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      &     |   0|  0|  0|  0| 1| 0| 0| 0|
------------------------------------------- 

Таким образом, вы можете видеть из таблицы, что единственный бит, которым они делятся, это 8 бит.

Второй пример

$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

Два общих бита - 32 и 4, которые при сложении возвращают 36.

Оператор "Или": |

$a =  9;
$b = 10;
echo $a | $b;

Это вывело бы число 11. Почему?

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      |     |   0|  0|  0|  0| 1| 0| 1| 1|
-------------------------------------------

Вы заметите, что у нас установлено 3 бита в столбцах 8, 2 и 1. Сложите их: 8+2+1=11.

<=> Оператор космического корабля

Добавлено в PHP 7

Оператор космического корабля <=> является последним оператором сравнения, добавленным в PHP 7. Это неассоциативный бинарный оператор с тем же приоритетом, что и операторы равенства (==, !=, ===, !==). Этот оператор позволяет упростить трехстороннее сравнение между левым и правым операндами.

Оператор приводит к целочисленному выражению:

  • 0 когда оба операнда равны
  • Меньше, чем 0 когда левый операнд меньше правого операнда
  • Лучше чем 0 когда левый операнд больше правого операнда

например

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

Хорошим практическим применением этого оператора были бы обратные вызовы типа сравнения, которые, как ожидается, будут возвращать нулевое, отрицательное или положительное целое число на основе трехстороннего сравнения между двумя значениями. Функция сравнения передана usort один из таких примеров.

До PHP 7 вы писали бы...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    if ($a < $b) {
        return -1;
    } elseif ($a > $b) {
        return 1;
    } else {
        return 0;
    }
});

Начиная с PHP 7 вы можете написать...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
});

_ Псевдоним для gettext()

Символ подчеркивания '_', как в _() это псевдоним gettext() функция.

Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"

Магические константы: хотя это не просто символы, а важная часть этого семейства токенов. Есть восемь магических констант, которые меняются в зависимости от того, где они используются.

__LINE__: Текущий номер строки файла.

__FILE__: Полный путь и имя файла. Если используется внутри включения, возвращается имя включенного файла. Начиная с PHP 4.0.2, __FILE__ всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в более старых версиях он содержал относительный путь при некоторых обстоятельствах.

__DIR__: Каталог файла. Если используется внутри включения, возвращается каталог включенного файла. Это эквивалентно dirname(__FILE__), Это имя каталога не имеет косой черты, если только оно не является корневым каталогом. (Добавлено в PHP 5.3.0.)

__FUNCTION__: Имя функции. (Добавлено в PHP 4.3.0) Начиная с PHP 5, эта константа возвращает имя функции в том виде, в котором она была объявлена ​​(с учетом регистра). В PHP 4 его значение всегда в нижнем регистре.

__CLASS__: Имя класса. (Добавлено в PHP 4.3.0) Начиная с PHP 5 эта константа возвращает имя класса в том виде, в котором оно было объявлено (с учетом регистра). В PHP 4 его значение всегда в нижнем регистре. Имя класса включает в себя пространство имен, в котором оно было объявлено (например, Foo\Bar). Обратите внимание, что начиная с PHP 5.4 __CLASS__ работает также в чертах. При использовании в методе черт, __CLASS__ имя класса, в котором используется черта.

__TRAIT__: Имя черты. (Добавлено в PHP 5.4.0) Начиная с PHP 5.4 эта константа возвращает признак в том виде, в котором он был объявлен (с учетом регистра). Имя признака включает пространство имен, в котором оно было объявлено (например, Foo\Bar).

__METHOD__: Имя метода класса. (Добавлено в PHP 5.0.0) Имя метода возвращается в том виде, в котором оно было объявлено (с учетом регистра).

__NAMESPACE__: Имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (добавлено в PHP 5.3.0).

Источник

Операторы типа

instanceof используется для определения того, является ли переменная PHP экземпляром объекта определенного класса.

<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);

Приведенный выше пример выведет:

bool(true)
bool(false)

Причина: выше пример $a является объектом mclass так что используйте только mclass данные не экземпляр с sclass

Пример с наследованием

<?php 
class pclass { } 
class childclass extends pclass { } 
$a = new childclass; 
var_dump($a instanceof childclass); 
var_dump($a instanceof pclass);

Приведенный выше пример выведет:

bool(true)
bool(true)

Пример с клоном

<?php 
class cloneable { } 
$a = new cloneable;
$b = clone $a; 
var_dump($a instanceof cloneable); 
var_dump($b instanceof cloneable);

Приведенный выше пример выведет:

bool(true)
bool(true)

Обзор операторов в PHP:


Логические операторы:

  • $ a && $ b: TRUE, если $ a и $ b равны TRUE.
  • $ a || $ b: ИСТИНА, если $ a или $ b - ИСТИНА.
  • $ a xor $ b: TRUE, если $ a или $ b TRUE, но не оба.
  • ! $ a: TRUE, если $ a не TRUE.
  • $ a и $ b: TRUE, если $ a и $ b равны TRUE.
  • $ a или $ b: TRUE, если $ a или $ b TRUE.

Операторы сравнения:

  • $ a == $ b: TRUE, если $ a равно $ b после жонглирования типа.
  • $ a === $ b: TRUE, если $ a равно $ b, и они одного типа.
  • $ a! = $ b: TRUE, если $ a не равно $ b после жонглирования типа.
  • $ a <> $ b: TRUE, если $ a не равно $ b после жонглирования типа.
  • $ a! == $ b: ИСТИНА, если $ a не равно $ b или они не одного типа.
  • $ a <$ b: TRUE, если $ a строго меньше, чем $ b.
  • $ a> $ b: TRUE, если $ a строго больше, чем $ b.
  • $ a <= $ b: TRUE, если $ a меньше или равно $ b.
  • $ a> = $ b: TRUE, если $ a больше или равно $ b.
  • $ a <=> $ b: целое число меньше, равно или больше нуля, когда $ a соответственно меньше, равно или больше, чем $ b. Доступно с PHP 7.
  • $ a? $ b: $ c: if $ a return $ b, иначе вернуть $c ( тернарный оператор)
  • $ a?? $ c: То же, что и $a? $a: $c ( оператор слияния null - требуется PHP>=7)

Арифметические операторы:

  • - $ a: напротив $ a.
  • $ a + $ b: сумма $ a и $ b.
  • $ a - $ b: разница между $ a и $ b.
  • $ a * $ b: произведение $ a и $ b.
  • $ a / $ b: частное от $ a и $ b.
  • $ a% $ b: остаток от $a, деленный на $ b.
  • $ a ** $ b: результат повышения $ a до $b'th power (введено в PHP 5.6)

Операторы увеличения / уменьшения:

  • ++ $ a: увеличивает $ a на единицу, а затем возвращает $ a.
  • $ a ++: возвращает $a, затем увеличивает $ a на единицу.
  • - $ a: уменьшает $ a на один, а затем возвращает $ a.
  • $ a--: возвращает $a, затем уменьшает $ a на единицу.

Битовые операторы:

  • $ a & $ b: Биты, которые установлены как в $a, так и в $ b, установлены.
  • $ a | $ b: Биты, которые установлены в $ a или $ b, установлены.
  • $ a ^ $ b: Биты, которые установлены в $ a или $ b, но не оба установлены.
  • ~ $ a: Биты, которые установлены в $a, не установлены, и наоборот.
  • $ a << $ b: сдвинуть биты шагов $ a $ b влево (каждый шаг означает "умножить на два")
  • $ a >> $ b: сдвинуть биты шагов $ a $ b вправо (каждый шаг означает "делить на два")

Строковые операторы:

  • $ a. $ b: объединение $ a и $ b.

Операторы массива:

  • $ a + $ b: объединение $ a и $ b.
  • $ a == $ b: TRUE, если $ a и $ b имеют одинаковые пары ключ / значение.
  • $ a === $ b: ИСТИНА, если $ a и $ b имеют одинаковые пары ключ / значение в одном и том же порядке и одинаковых типов.
  • $ a! = $ b: TRUE, если $ a не равно $ b.
  • $ a <> $ b: TRUE, если $ a не равно $ b.
  • $ a! == $ b: ИСТИНА, если $ a не совпадает с $ b.

Операторы присваивания:

  • $ a = $ b: значение $ b присваивается $ a
  • $ 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
  • $ a ** = $ b: так же, как $ a = $ a ** $ b
  • $ a. = $ b: То же, что $ a = $ a. $ б
  • $ a & = $ b: то же самое, что $ a = $ a & $ b
  • $ a | = $ b: То же, что $a = $a | $ б
  • $ a ^ = $ b: так же, как $ a = $ a ^ $ b
  • $ a << = $ b: То же, что $ a = $ a << $ b
  • $ a >> = $ b: то же самое, что $a = $a >> $b

Заметка

and оператор и or оператор имеет более низкий приоритет, чем оператор присваивания =,

Это означает, что $a = true and false; эквивалентно ($a = true) and false,

В большинстве случаев вы, вероятно, захотите использовать && а также ||, которые ведут себя так, как известно из языков, таких как C, Java или JavaScript.

Оператор космического корабля <=> (Добавлено в PHP 7)

Примеры для <=> Оператор космического корабля (PHP 7, Источник: PHP Manual):

Целые числа, числа с плавающей запятой, строки, массивы и объекты для трехстороннего сравнения переменных.

// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1

$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1

// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1

{} Фигурные скобки

И несколько слов о последнем посте

$x[4] = 'd'; // it works
$x{4} = 'd'; // it works

$echo $x[4]; // it works
$echo $x{4}; // it works

$x[] = 'e'; // it works
$x{} = 'e'; // does not work

$x = [1, 2]; // it works
$x = {1, 2}; // does not work

echo "${x[4]}"; // it works
echo "${x{4}}"; // does not work

echo "{$x[4]}"; // it works
echo "{$x{4}}"; // it works

Нулевой оператор объединения (??)

Этот оператор был добавлен в PHP 7.0 для общего случая необходимости использования троичного оператора в сочетании с isset(), Возвращает свой первый операнд, если он существует и не существует NULL; в противном случае он возвращает свой второй операнд.

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

Строки PHP: Строки PHP можно указывать четырьмя способами, а не двумя способами:

1) Строки в одинарных кавычках:

$string = 'This is my string'; // print This is my string

2) Строки с двойными кавычками:

$str = 'string';

$string = "This is my $str"; // print This is my string

3) Эредок:

$string = <<<EOD
This is my string
EOD; // print This is my string

4) Nowdoc (начиная с PHP 5.3.0):

$string = <<<'END_OF_STRING'
    This is my string 
END_OF_STRING; // print This is my string

ВОПРОС:

Что значит => имею в виду?


ОТВЕТ:

=> Является ли символ, который мы, люди, решили использовать для разделения "Key" => "Value" пары в ассоциативных массивах.

-разработка:

Чтобы понять это, мы должны знать, что такое ассоциативные массивы. Первое, что возникает, когда обычный программист думает о массиве (в PHP), будет что-то похожее на:

$myArray1 = array(2016, "hello", 33);//option 1

$myArray2 = [2016, "hello", 33];//option 2

$myArray3 = [];//option 3
$myArray3[] = 2016; 
$myArray3[] = "hello"; 
$myArray3[] = 33;

Где, как если бы мы хотели вызвать массив в какой-то более поздней части кода, мы могли бы сделать:

echo $myArray1[1];// output: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello

Все идет нормально. Тем не менее, как люди, нам может быть трудно запомнить этот индекс [0] из массива это значение 2016 года, индекс [1] из массива это привет, а индекс [2] массива является простым целочисленным значением. Тогда у нас есть альтернатива - использовать ассоциативный массив. Ассоциативный массив имеет несколько отличий от последовательного массива (как и в предыдущих случаях, поскольку они увеличивают индекс, используемый в предварительно определенной последовательности, путем увеличения на 1 для каждого следующего значения).

Отличия (между последовательным и ассоциативным массивом):

  • Во время объявления ассоциативного массива вы не только включаете value того, что вы хотите поместить в массив, но вы также поместите значение индекса (называемый key), который вы хотите использовать при вызове массива в последующих частях кода. Следующий синтаксис используется во время его объявления: "key" => "value",

  • При использовании ассоциативного массива key Затем значение будет помещено в индекс массива для получения желаемого value,

Например:

    $myArray1 = array( 
        "Year" => 2016, 
        "Greetings" => "hello", 
        "Integer_value" => 33);//option 1

    $myArray2 = [ 
        "Year" =>  2016, 
        "Greetings" => "hello", 
        "Integer_value" => 33];//option 2

    $myArray3 = [];//option 3
    $myArray3["Year"] = 2016; 
    $myArray3["Greetings"] = "hello"; 
    $myArray3["Integer_value"] = 33;

И теперь, чтобы получить тот же результат, что и раньше, key значение будет использоваться в индексе массивов:

echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello

ФИНАЛЬНАЯ ТОЧКА:

Итак, из приведенного выше примера довольно легко увидеть, что => Символ используется для выражения отношения ассоциативного массива между каждым из key а также value пары в массиве во время инициации значений в массиве.

Вопрос:

Что означает "&" здесь в PHP?

Оператор PHP "&"

Облегчает жизнь, как только мы к ней привыкли.(Внимательно проверьте пример ниже)

& обычно проверяет биты, которые установлены как в $ a, так и в $ b.

Вы когда-нибудь замечали, как работают эти звонки?

   error_reporting(E_ERROR | E_WARNING | E_PARSE);
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    error_reporting(E_ALL & ~E_NOTICE);
    error_reporting(E_ALL);

Так что за всем этим стоит игра побитового оператора и битов.

Один из полезных примеров - простые конфигурации, такие как приведенные ниже, поэтому одно целочисленное поле может хранить тысячи комбинаций для вас.

Большинство людей уже читали документы, но не использовали реальный вариант использования этих побитовых операторов.

Пример, который вы полюбите

<?php

class Config {

    // our constants must be 1,2,4,8,16,32,64 ....so on
    const TYPE_CAT=1;
    const TYPE_DOG=2;
    const TYPE_LION=4;
    const TYPE_RAT=8;
    const TYPE_BIRD=16;
    const TYPE_ALL=31;

    private $config;

    public function __construct($config){
        $this->config=$config;

        if($this->is(Config::TYPE_CAT)){
            echo 'cat ';
        }
        if($this->is(Config::TYPE_DOG)){
            echo 'dog ';
        }
        if($this->is(Config::TYPE_RAT)){
            echo 'rat ';
        }
        if($this->is(Config::TYPE_LION)){
            echo 'lion ';
        }
        if($this->is(Config::TYPE_BIRD)){
            echo 'bird ';
        }
        echo "\n";
    }

    private function is($value){
        return $this->config & $value;
    }
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird

== используется для проверки равенства без учета типа данных переменной

=== используется для проверки равенства для значения переменной * и ** типа данных

пример

$a = 5

  1. if ($a == 5) - оценит как истинный

  2. if ($a == '5') - будет иметь значение true, поскольку при сравнении этого значения оба php внутренне преобразуют это строковое значение в целое число, а затем сравнивают оба значения.

  3. if ($a === 5) - оценит как истинный

  4. if ($a === '5') - оценивается как ложное, потому что значение равно 5, но это значение 5 не является целым числом.

Нулевой оператор Coalesce "??" (Добавлено в PHP 7)

Не самое запоминающееся имя для оператора, но PHP 7 содержит довольно удобное объединение нулей, поэтому я решил поделиться примером.

В PHP 5 у нас уже есть троичный оператор, который проверяет значение, а затем возвращает второй элемент, если это возвращает true, и третий, если это не так:

echo $count ? $count : 10; // outputs 10

Существует также сокращение для того, что позволяет пропустить второй элемент, если он совпадает с первым: echo $count?: 10; // также выводит 10

В PHP 7 мы дополнительно получаем оператор, который вместо того, чтобы указывать на крайнюю путаницу, как я обычно использую вместе два знака вопроса, позволяет нам связать воедино строку значений. Читая слева направо, первое значение, которое существует и не является нулевым, является значением, которое будет возвращено.

// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16

Эта конструкция полезна для предоставления приоритета одному или нескольким значениям, исходящим, возможно, из пользовательского ввода или существующей конфигурации, и для безопасного возврата к заданному значению по умолчанию, если эта конфигурация отсутствует. Это небольшая функция, но я знаю, что буду использовать ее, как только мои приложения обновятся до PHP 7.

Обнуляемое объявление типа возврата

В PHP 7 добавлена ​​поддержка объявлений возвращаемых типов. Аналогично объявлениям типа аргумента, декларации возвращаемого типа определяют тип значения, которое будет возвращено из функции. Для объявлений возвращаемого типа доступны те же типы, что и для объявлений типов аргументов.

Строгая типизация также влияет на объявления возвращаемого типа. В слабом режиме по умолчанию возвращаемые значения будут приводиться к правильному типу, если они еще не относятся к этому типу. В сильном режиме возвращаемое значение должно быть правильного типа, в противном случае выдается ошибка TypeError.

Начиная с PHP 7.1.0, возвращаемые значения могут быть помечены как обнуляемые, если перед именем типа ставить знак вопроса (?). Это означает, что функция возвращает либо указанный тип, либо NULL.

<?php
function get_item(): ?string {
    if (isset($_GET['item'])) {
        return $_GET['item'];
    } else {
        return null;
    }
}
?>

Источник

Три точки в качестве оператора Splat (...) (начиная с PHP 5.6)

В PHP есть оператор "..." (три точки), который называется оператором Splat. Он используется для передачи произвольного количества параметров в функции, и этот тип функции называется Variadic Functions. Давайте рассмотрим примеры использования "..." (три точки).

Пример 1:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

echo calculateNumbers(10, 20, 30, 40, 50);

//Output 150
?>

Каждый аргумент функции calculateNumbers() передается через $params в виде массива при использовании "â € ¦".

Есть много разных способов использования оператора "… ". Ниже приведены некоторые примеры:

Пример 2:

<?php
function calculateNumbers($no1, $no2, $no3, $no4, $no5){
    $total = $no1 + $no2 + $no3 + $no4 + $no5;
    return $total;
}

$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers(...$numbers);

//Output 150
?>

Пример 3:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}
$no1 = 70;
$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers($no1, ...$numbers);

//Output 220
?>

Пример 4:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

$numbers1 = array(10, 20, 30, 40, 50);
$numbers2 = array(100, 200, 300, 400, 500);
echo calculateNumbers(...$numbers1, ...$numbers2);

//Output 1650

?>

?-> Оператор NullSafe

На данный момент это просто предложение, вы можете найти его здесь. ЭтоNullSafe Operator, он возвращается null в случае, если вы попытаетесь вызвать функции или получить значения из null... Пример

$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; //return null
$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object

Null Coalesce Operator php

Нулевой оператор слияния (??) был добавлен в PHP7 для общего случая необходимости использования троичного в сочетании с isset(). Он возвращает свой первый операнд, если он существует и не равен NULL, в противном случае он возвращает свой второй операнд, например, в следующем примере:

$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; 

NullSafe Operator "?->" (возможно) с php8

На данный момент это всего лишь предложение, вы можете найти его, введите описание ссылки здесь.?-> это NullSafe Operator, он возвращается null в случае, если вы попытаетесь вызвать функции или получить значения из null...

Примеры:

<?php
$obj = null;
$obj = $obj?->attr; //return null
$obj = ?->funct(); // return null
$obj = $objDrive->attr; // Error: Trying to get property 'attr' of non-object
?>

Вот имена всех операторов PHP (TOKEN).

Ссылка http://php.net/manual/en/tokens.php

#[] атрибуты начиная с PHP 8

Ты можешь написать #[attribute_name]начиная с PHP 8. Это в PHP (а также в Rust и C#). Другие языки могут использовать такие имена, как аннотации (Java) или декораторы (Python, Javascript) для аналогичной функции. До PHP 8, #[whatever]был бы комментарием до конца строки (потому что #начинает комментарий в PHP). Таким образом, если атрибут является последним в строке, он будет игнорироваться в версиях до PHP 8. Если он не является последним в строке, он будет закомментировать все, что было после него до PHP 8 (поскольку тогда ]прекращает его).

В пхп 8

Вместо того, чтобы писать классику !== nullвы можете использовать ?оператора написать всего 1 строку кода, код становится довольно понятным:

До:

      $firsName =  null;
if ($session !== null) {
    $user = $session->user;
    if ($user !== null) {
        $name = $user->getName();
        if ($name !== null) {
            $firstName = $name->firstName;
        }
    }
}

После:

      $firsName = $session?->user?->getName()?->firstName;

Использовать вместо switch. matchвыражение использует строгое сравнение ( ===) вместо. Сравнение является строгим независимо от strict_types.

До:

      switch ('A') {
    case 'A':
        echo "found A";
        break;
    case 'B':
        echo "found B";
        break;
}
// Result: "found A"

После:

      echo match ('A') {
  'A' => "found A",
  'B' => "found B",
};
// Result: "found A"

Синтаксис с двумя точками

При использовании между двумя символами в квалификации встроенных строковых функций PHP,..действует для выражения инклюзивного диапазона символов.a-eэквивалентноabcde.

      echo trim('adobe', 'a..e');

Отпечатки:

      o

Собственные функции PHP, допускающие синтаксис диапазона с двумя точками

Массивы PHP:

Массив - это структура данных, в которой один или несколько значений аналогичного типа хранятся в одном значении.

• Числовой массив - массив с числовым индексом. Значения хранятся и доступны линейно.

• Ассоциативный массив - массив со строками в качестве индекса. При этом значения элементов хранятся вместе со значениями ключей, а не в строгом линейном порядке индекса.

• Многомерный массив - доступ к массиву, содержащему один или несколько массивов и значений, осуществляется с помощью нескольких индексов. Числовой массив.

Эти массивы могут хранить числа, строки и любой объект, но их индекс будет представлен числами. По умолчанию индекс массива начинается с нуля.

Пример :

      <html>
   <body>
   
      <?php
         /* First method to create array. */
         $numbers = array( 1, 2, 3, 4, 5);
         
         foreach( $numbers as $value ) {
            echo "Value is $value <br />";
         }
         
         /* Second method to create array. */
         $numbers[0] = "one";
         $numbers[1] = "two";
         $numbers[2] = "three";
         $numbers[3] = "four";
         $numbers[4] = "five";
         
         foreach( $numbers as $value ) {
            echo "Value is $value <br />";
         }
      ?>
      
   </body>
</html>

Выход :

      Value is 1 
Value is 2 
Value is 3 
Value is 4 
Value is 5 
Value is one 
Value is two 
Value is three 
Value is four 
Value is five

Ассоциативные массивы

Ассоциативные массивы очень похожи на числовые массивы с точки зрения функциональности, но отличаются по индексу. Ассоциативный массив будет иметь свой индекс в виде строки, чтобы вы могли установить прочную связь между ключом и значениями.

Пример:

      <html>
   <body>
      
      <?php
         /* First method to associate create array. */
         $salaries = array("mohammad" => 2000, "qadir" => 1000, "zara" => 500);
         
         echo "Salary of mohammad is ". $salaries['mohammad'] . "<br />";
         echo "Salary of qadir is ".  $salaries['qadir']. "<br />";
         echo "Salary of zara is ".  $salaries['zara']. "<br />";
         
         /* Second method to create array. */
         $salaries['mohammad'] = "high";
         $salaries['qadir'] = "medium";
         $salaries['zara'] = "low";
         
         echo "Salary of mohammad is ". $salaries['mohammad'] . "<br />";
         echo "Salary of qadir is ".  $salaries['qadir']. "<br />";
         echo "Salary of zara is ".  $salaries['zara']. "<br />";
      ?>
   
   </body>
</html>

Выход :

      Salary of mohammad is 2000
Salary of qadir is 1000
Salary of zara is 500
Salary of mohammad is high
Salary of qadir is medium
Salary of zara is low

Многомерные массивы

Многомерный массив. Каждый элемент основного массива также может быть массивом. И каждый элемент в подмассиве может быть массивом и так далее. Доступ к значениям в многомерном массиве осуществляется с помощью множественного индекса.

Пример

      <html>
   <body>
      
      <?php
         $marks = array( 
            "mohammad" => array (
               "physics" => 35,
               "maths" => 30,   
               "chemistry" => 39
            ),
            
            "qadir" => array (
               "physics" => 30,
               "maths" => 32,
               "chemistry" => 29
            ),
            
            "zara" => array (
               "physics" => 31,
               "maths" => 22,
               "chemistry" => 39
            )
         );
         
         /* Accessing multi-dimensional array values */
         echo "Marks for mohammad in physics : " ;
         echo $marks['mohammad']['physics'] . "<br />"; 
         
         echo "Marks for qadir in maths : ";
         echo $marks['qadir']['maths'] . "<br />"; 
         
         echo "Marks for zara in chemistry : " ;
         echo $marks['zara']['chemistry'] . "<br />"; 
      ?>
   
   </body>
</html>

Выход:

      Marks for mohammad in physics : 35
Marks for qadir in maths : 32
Marks for zara in chemistry : 39

Функции массива PHP

  • array() -> Создает массив

  • array_change_key_case() -> Изменяет все ключи в массиве на нижний или верхний регистр

  • array_chunk() -> Разбивает массив на части массивов array_column() -> Возвращает значения из одного столбца во входном массиве

  • array_combine() -> Создает массив, используя элементы из одного массива «ключей» и одного массива «значений»

  • array_count_values ​​() -> Подсчитывает все значения массива

  • array_diff() -> Сравнить массивы и вернуть различия (только для сравнения значений)

  • array_diff_assoc() -> Сравнить массивы и вернуть различия (сравнить ключи и значения)

  • array_diff_key() -> Сравнить массивы и вернуть различия (только для сравнения ключей)

  • array_diff_uassoc() -> Сравнить массивы и вернуть различия (сравнить ключи и значения, используя определяемую пользователем функцию сравнения ключей)

  • array_diff_ukey() -> Сравнить массивы и вернуть различия (только для сравнения ключей с использованием определяемой пользователем функции сравнения ключей)

  • array_fill() -> Заполняет массив значениями

  • array_fill_keys() -> Заполняет массив значениями, указав ключи

  • array_filter() -> Фильтрует значения массива с помощью функции обратного вызова

  • array_flip() -> Переворачивает / меняет все ключи на связанные с ними значения в массиве

  • array_intersect () -> Сравнить массивы и вернуть совпадения (только для сравнения значений)

  • array_intersect_assoc () -> Сравнить массивы и вернуть совпадения (сравнить ключи и значения)

  • array_intersect_key () -> Сравнить массивы и вернуть совпадения (только для сравнения ключей)

  • array_intersect_uassoc () -> Сравнить массивы и вернуть совпадения (сравнить ключи и значения, используя определяемую пользователем функцию сравнения ключей)

  • array_intersect_ukey() -> Сравнить массивы и вернуть совпадения (только для сравнения ключей с использованием определяемой пользователем функции сравнения ключей)

  • array_key_exists() -> Проверяет, существует ли указанный ключ в массиве

  • array_keys() -> Возвращает все ключи массива

  • array_map() -> Отправляет каждое значение массива пользовательской функции, которая возвращает новые значения

  • array_merge() -> Объединяет один или несколько массивов в один массив

  • array_merge_recursive() -> Рекурсивно объединяет один или несколько массивов в один.

  • array_multisort() -> Сортирует множественные или многомерные массивы

Вызываемый синтаксис первого класса (PHP 8.1)

Многоточие (...) получил еще одно применение, представленное в PHP8.1, для создания анонимной функции из вызываемой функции.

До PHP 8.1

      $callable = [$instance, 'someMethod'];

В PHP 8.1

      $callable = $instance->someMethod(...);

Об этом подробнее здесь

Что означает символ \ (обратная косая черта) в PHP

Он используется для экранирования строкового типа или для изменения конкретного регистра:

Примеры:

Здесь \r\n и \n используются для перехода на новую строку (например, кнопка ввода)

      
echo "Hello world \n\r I am Herakl";

В качестве альтернативы вы можете использовать PHP_EOL. Есть некоторые исключения. Во-первых, он может использовать условие только в двух кавычках ("").

      echo " Hello \\ I am robot";

В stackoverflow он не видит правильно.

Обратная косая черта также используется в пространствах имен или в именах условий:

      namespace App\Http\Controllers;

use App\Models;

Кроме того, вы должны посетить о косых чертах https://www.php.net/manual/en/function.addslashes.php

Другие вопросы по тегам