Питання Довідник - що означає цей символ у PHP?


Що це?

Це колекція питань, що надходять кожного разу про синтаксис у PHP. Це також Wiki Wiki, тому кожен запрошений взяти участь у підтримці цього списку.

Чому це?

Було важко знайти запитання про операторів та інших синтаксичних жетонів.¹
Основна ідея полягає в тому, щоб мати посилання на існуючі запитання про переповнення стаканів, тому нам простіше посилатися на них, а не копіювати вміст з Посібника PHP.

¹ Примітка. З січня 2013 року переповнення стек підтримує спеціальні символи. Просто опишіть умови пошуку за лапками, наприклад [php] "==" vs "==="

Що тут робити?

Якщо хтось із вас вказав, що ви задали таке запитання, будь-ласка, знайдіть конкретний синтаксис нижче. Зв'язані сторінки до PHP посібник разом з пов'язаними питаннями, швидше за все, відповість на ваше запитання. Якщо так, вас заохочують покращити відповідь. Цей список не має на меті замінити надану допомогу іншим особам.

Список

Якщо ваш конкретний токен не вказаний нижче, ви можете знайти його в Список маркерів для аналізу.


&  Побітові оператори або Список літератури


=&  Список літератури


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


&&  Логічні оператори


%  Арифметичні оператори


!!  Логічні оператори


@  Оператори керування помилками


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


??  Оператор Null Coalesce (з 7 PHP)


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


::  Оператор роздільної здатності


\  Простори імен


->  Класи та об'єкти


=>  Масиви


^  Побітові оператори


>>  Побітові оператори


<<  Побітові оператори


<<<  Heredoc або Nowdoc


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


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


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


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


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


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


<=>  Оператори порівняння (починаючи з PHP 7.0)


|  Побітові оператори


||  Логічні оператори


~  Побітові оператори


+  Арифметичні оператори, Оператори масиву


+= і -=  Оператори присвоєння


++ і --  Оператори, що збільшують / зменшують


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


.  Струнні оператори


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

,  Змінні декларації


$$  Змінні змінні


`  Оператор виконання


<?=  Короткі відкриті теги


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


<?  Відкриття та закриття тегів


...  Аргумент розпакування (з PHP 5.6)


**  Експоненція (з PHP 5.6)


#  Коментар до однієї лінії оболонки



3793


походження


Я знаю, це не суто PHP, а як щодо включення посилання на phpdoc.org для синтаксису коментарів phpDocumentor, який зазвичай використовується, і його також неможливо знайти /**? - Mike
Чи можу я запропонувати квадратну дужку та фігурну дужку? - ajreal
Я також подолала цю проблему (не можу шукати спеціальні символи), саме тому я зробив це SymbolHound, пошукова система, яка не ігнорує спеціальні символи. Я також опублікував його StackApps. - dncrane
Ну, з заголовку Чому це?, Я думаю, це тому, що "Основна ідея полягає в тому, щоб мати посилання на існуючі питання на переповненні стака, тому нам легше посилатися на них". - Herbert
Сьогодні запитали (20/15 листопада) stackoverflow.com/questions/33833259/what-is-rscat-in-php запитую "Що таке $ rsCat у php" (якщо це питання все-таки стане видимою і не буде видалено). Як не дивно, тут немає посилання $ змінна, але приблизно $$ Змінні тільки змінні. Я вважаю, що десь потрібно внести зміни. - Funk Forty Niner


Відповіді:


Оператори, що збільшують / зменшують

++ оператор збільшення

-- оператор зменшення

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.

Вони можуть йти до або після змінної.

Якщо ввести перед змінною, операція increment / decrement виконується до змінної перший то результат повертається. Якщо після змінної вказати змінну, то це значення перший повертається, потім виконується операція збільшення / декремент.

Наприклад:

$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 (a-z та A-Z).


Стічні переповнення повідомлень:


950



Різниця набагато більше, ніж просто швидкість ... Розглянемо $ x = 0; $ y = $ x ++; в порівнянні з $ x = 0; $ y = ++ $ x; і значення у $ y у кожному випадку - Mark Baker
+1 для нотатки, що декрементатори не працюють на символах, лише на номери - Mark Baker
Заради всіх, будь ласка, видаліть напівжирну інформацію про попереднє збільшення, що становить нескінченно швидше. Це абсолютний найгірший приклад передчасної оптимізації, і така інформація не повинна бути в головах людей, якщо вони тільки починають вивчати PHP. - Lotus Notes
@Lotus - я вважаю це веселим фактом. Якщо ви новачок у PHP, або C ++ тощо, здається досить хитрий, що ++ i та i ++ досить різні для роботи на різних швидкостях. Я знайшов це захоплююче. - Peter Ajtai
@Peter Ajtai Так, це цікаво, але з того моменту, як ви створили свій пост, це здається одним з найважливіших фактів PHP, що є абсолютно необхідним для використання мови. - Lotus Notes


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

Що трохи? Трохи представляє 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.

Оператор "Or": |

$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.


361



Що робити, якщо $ a приймає значення більше 255? - Aycan Yaşıt
Існує автоматичний калькулятор з розрядністю: bitwiseoperatorcalculator.com - jonprasetyo
@ AycanYaşıt Більшість операційних систем використовує 32-бітну та 64-бітну систему, тобто ліміт значно перевищує 255 (8 біт). - AlbertSamuel
@ AycanYaşıt Насправді, представлення тут з одним байтом довжина навіть не правильне, тому що навіть найменше ціле число досі 64 біт (8 байт) в пам'яті на сучасній 64-бітній платформі. - Kaii


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

Знак підкреслення '_' як в _() є псевдонімом до gettext() функція


225





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"

210





Магічні константи: Хоча це не просто символи, а важлива частина цієї токенної сім'ї. Є вісім магічних констант, які змінюються в залежності від того, де вони використовуються.

__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).

Джерело


194





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

Додано в PHP 7

The оператор космічного корабля  <=> це останній оператор порівняння, доданий в PHP 7. Це a неасоціативний бінарний оператор з тим же пріоритетом, що і оператори рівності (==, !=, ===, !==) Цей оператор дозволяє просте трьохзвенне порівняння між лівим та правом операндами.

Оператор викликає ціле вираження:

  • 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;
});

189



Не впевнений, як це зробити $a <=> $b відрізняється від $a - $b - rev
@ АцидShout $a - $b працює для чисел, але не для рядків, об'єктів або масивів. - mcrumley
@mrrumley Ні, це гірше, ніж це. В загальному $a - $b навіть не працює для цифр; це працює тільки для цілі числа. Це не працює для не цілих чисел, тому що usort скидає значення поверненої вами функції компаратора до int, що означає, що 0,5 повертається на 0, що означає, що два числа з різницею менше 1, такі як 4 і 4.6, можуть (залежно від того, який з них передано як перший аргумент для вашої функції компаратора) неправильно порівнюються як рівні. - Mark Amery
@MarkAmery міграційний посібник не є документованою поведінкою оператора. Для цього ви хочете переглянути розділ "Оператори мови" посібника для цього php.net/language.operators.comparison фактична поведінка позаду цього залежить від різних функцій порівняння API, наприклад, під час виконання strcmp для рядків, де ви не можете гарантувати фактичне повернення значення в кожному конкретному випадку. Звичайно, це майже завжди 1, 0, або -1, але для випадків, коли ви не можете гарантувати це, наче обернувши strcmp libc, ви пропонуєте таку саму визначену поведінку, що і безпека основної специфікації - Sherif
@MarkAmery Точка тут полягає в тому, щоб не дозволяти людям покладатися на невизначену поведінку. Для одного випадку, коли хтось отримує значення, яке не точно 1, 0 або -1, ви отримуєте хтось подання звіту про помилку, думаючи, що на мові є щось погане. Саме тому ми документуємо, що все, що ми можемо гарантувати, це буде цінність менше, ніж, більш чим, або дорівнює 0, і не обов'язково 1, 0 і -1. - Sherif


Тип операторів

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 тому використовуйте лише a 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)

121



Вищесказане працює з "інтерфейсами". Це корисно для перевірки наявності певного інтерфейсу. - Ryan Vincent


Огляд оператори в PHP:


Логічні оператори:

  • $ a && $ b: ІСТИНА, якщо обидва $ a та $ b - TRUE.
  • $ a || $ b: ІСТИНА, якщо $ a або $ b - це TRUE.
  • $ a xor $ b: ІСТИНА, якщо будь-який $ a або $ b є TRUE, але не обидва.
  • ! $ a: ІСТИНА, якщо $ a не є TRUE.
  • $ a і $ b: ІСТИНА, якщо обидва $ a та $ b - TRUE.
  • $ a або $ b: ІСТИНА, якщо $ a або $ b - це TRUE.

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

  • $ a == $ b: ІСТИНА, якщо $ a дорівнює $ b після типового жонглювання.
  • $ a === $ b: ІСТИНА, якщо $ 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 : ІСТИНА, якщо $ a менше або дорівнює $ b.
  • $ a> = $ b : TRUE, якщо $ a більше або дорівнює $ b.
  • $ a <=> $ b : Ціле число менше, дорівнює чи перевищує нуль, коли $ a відповідно менше, дорівнює або перевищує $ b. Доступно з PHP 7.
  • $ a? $ b: $ c : якщо $ a повернення $ b ще поверне $ c (трійковий оператор)
  • $ a ?? $ c : Те ж, що і $ a? $ a: $ c (нульовий коалессінговий оператор - вимагає 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 потужності (представлений в 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 : 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 << = $ b : Те саме, що і $ a = $ a << $ b
  • $ a >> = $ b : Те саме, що і $ a = $ a >> $ b

Примітка

and оператор і or Оператор має менший пріоритет, ніж оператор присвоювання =.

Це означає що $a = true and false; еквівалентно ($a = true) and false.

У більшості випадків ви, мабуть, захочете використовувати && і ||, які ведуть себе так, як це відомо з таких мов, як C, Java або JavaScript.


96





Оператор космічного корабля <=> (Додано в 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

72



Це копія цього відповісти. - David Archibald
Перевірте php.net/manual/en/language.operators.comparison.php для довідки - rajangupta


{} Фігурні дужки

І деякі слова про останній пост

$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

55



{''} позначення для назв властивостей. echo $ movies-> movie -> ('great-lines') -> line; може використовуватися для доступу до даних в SimpleXMLElement. Можливо, його можна використовувати і в інших випадках. php.net/manual/en/simplexml.examples-basic.php - Andrei
Це було цікаво знайти, хоча - adelowo