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

что это?

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

почему это?

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

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

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

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

Список

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


& Побитовые Операторы или ссылки


=& ссылки


&= Побитовые Операторы


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


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


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


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


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


?? Оператор Объединения Null (начиная с PHP 7)


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


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


пространства имен


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


=> массивы


^ Побитовые Операторы


>> побитовое Операторы


<< Побитовые Операторы


<<< Heredoc или Nowdoc


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


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


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


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


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


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


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


| Побитовые Операторы


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


~ побитовое Операторы


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


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


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


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


. Операторы Строку


, Доводы

, Переменные


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


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


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


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


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


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


** возведение в степень (начиная с PHP 5.6)


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


18 ответов


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

++ оператор инкремента

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

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++ будет иметь те же результаты.

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

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

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

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

один раз z достиг aa следующий, и так далее.

обратите внимание, что символьные переменные могут быть увеличены, но не уменьшены и даже так поддерживаются только простые символы ASCII (a-z и A-Z).


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


Оператор Побитового

что такое бит? Немного представление 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.


_ псевдоним для 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__: полный путь и имя файла. Если используется внутри include, возвращается имя включенного файла. Начиная с PHP 4.0.2,__FILE__ всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в более старых версиях он содержал относительный путь при некоторых обстоятельствах.

__DIR__ - каталог файлов. Если используется внутри include, возвращается каталог включенного файла. Это эквивалентно 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).

источник


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

добавлено в 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;
});

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

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)

пример с Clone

<?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 истинны.
  • $a / / $b: TRUE, если значение $a или $b равно TRUE.
  • $a xor $b: TRUE, если $a или $ b истинны,но не оба.
  • ! $a: TRUE, если $a не ИСТИННЫЙ.
  • $a и $b: TRUE, если оба $a и $b истинны.
  • $a или $b: TRUE, если значение $a или $b равно TRUE.

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

  • $a == $b: TRUE, если $a равно $b после жонглирования типом.
  • $a === $b: TRUE, если $a равно $b, и они одного типа.
  • $a != $си : TRUE, если $a не равно $b после жонглирования типом.
  • $a $b: TRUE, если $a не равно $b после жонглирования типом.
  • $a !== $b: TRUE, если $a не равно $b, или они не одного типа.
  • $a : TRUE, если $a строго меньше $b.
  • $a > $b : TRUE, если $a строго больше $b.
  • $a : TRUE, если $a меньше или равно $b.
  • $a >= $b : TRUE, если $a больше или равно $b.
  • $a $b : целое число меньше, равно или больше нуля, когда $a соответственно меньше, равно или больше $b. Доступно с PHP 7.
  • $a ? $b: $c: если $ a return $b else return $c (тернарный оператор)
  • $a ?? $c : же как долларов ? $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 & $b : устанавливаются биты, заданные как в $a, так и в $B.
  • $a / $b : устанавливаются биты, заданные в $a или $b.
  • $a ^ $b : биты набор в $a или $b, но не оба установлены.
  • ~ $a : биты, заданные в $a, не заданы, и наоборот.
  • $a : сдвиньте биты шагов $a $b влево (каждый шаг означает "умножить на два")
  • $a >> $b : сдвиньте биты шагов $a $b вправо (каждый шаг означает "разделить на два")

Строку Операторов:

  • $a . $b: конкатенация $a и $b.

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

  • $a + $b: объединение $a и $b.
  • $a == $b : TRUE, если $a и $ b имеют одинаковые пары ключ/значение.
  • $a === $b : TRUE, если $a и $b имеют одинаковые пары ключ/значение в одном порядке и одного типа.
  • $a != $b: TRUE, если $a не равно до $Б.
  • $a $b : TRUE, если $a не равно $b.
  • $a !== $b : TRUE, если $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 . $b
  • $a & = $b: то же самое, что $a = $a & $b
  • $a / = $b: то же, что $a = $a | $b
  • $a ^= $b: то же самое, что $a = $a ^ $b
  • $a : то же самое, что $a = $a
  • $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: Строки 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) Heredoc:

$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

оператор объединения Null (??)

этот оператор был добавлен в 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';
?>

вопрос:

что значит => в смысле?


ответ:

=> это символ, который мы, люди, решили использовать для разделения "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;

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

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

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

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

  • Durring объявление Ассоциативный массив, вы не только включаете 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

Null объединяет оператор php

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

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

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

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

пример

$a = 5

  1. if ($a == 5) - возвращает значение true

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

  3. if ($a === 5) - возвращает значение true

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


оператор объединения Null"??"(Добавлено в PHP 7)

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

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

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

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

в PHP 7, мы дополнительно получим ?? оператор, который вместо того, чтобы указывать на крайнюю путаницу, как я обычно использую два вопросительных знака вместе, вместо этого позволяет нам объединить строку значений. Если читать слева направо, первое значение, которое реально существует и не является null-это значение, которое будет возвращено.

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

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

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


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

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

enter image description here