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

avatar
Gordon
17 сентября 2010 в 16:24
741820
23
4792

Что это?

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

Почему это?

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

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

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

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

Список

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


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


=& Ссылки


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


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


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


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


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


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


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


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


: Альтернативный синтаксис для управляющих структур, Тернарный оператор, Объявление типа возврата <55> <2937079>


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


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


-> Классы и объекты


=> Массивы


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


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


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


<<< Heredoc или Nowdoc


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


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


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


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


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


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


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

  • Оператор космического корабля (трехстороннее сравнение)

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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


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


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


?-> Вызовы оператора NullSafe (начиная с PHP 8.0)


Источник
Mike
21 августа 2011 в 02:25
44

Я знаю, что это не строго PHP, но как насчет включения ссылки на phpdoc.org для синтаксиса комментариев phpDocumentor, который обычно используется, и также невозможно найти /**?

ajreal
26 ноября 2011 в 10:38
9

Могу я предложить квадратную скобку и фигурную скобку?

dncrane
6 декабря 2011 в 18:34
130

Я тоже часто сталкивался с этой проблемой (не мог искать специальные символы), поэтому я создал SymbolHound, поисковую систему, которая не игнорирует специальные символы. Я также разместил его на StackApps.

Herbert
26 августа 2012 в 18:34
2

Ну, из заголовка Почему это? , я бы предположил, что это потому, что «Основная идея состоит в том, чтобы иметь ссылки на существующие вопросы по Stack Overflow, чтобы нам было легче ссылаться на них».

Josh
26 августа 2014 в 16:21
0

Удивительный пост. Даже будучи старшим разработчиком php, на это очень удобно ссылаться, когда мне нужно устно объяснить вещи своей команде.

Martin Ender
5 ноября 2014 в 14:50
0

Должны ли мы добавить этот? Это не синтаксис, но так же сложно гуглить, и некоторым людям он может показаться синтаксисом.

Funk Forty Niner
20 ноября 2015 в 18:19
4

Сегодня (20/15 ноября) был задан вопрос coderhelper.com/questions/33833259/what-is-rscat-in-php с вопросом «Что такое $ rsCat в php» (если этот вопрос по-прежнему будет виден, а не удален). Как ни странно, нет ссылки на переменную $, а только на переменную $$. Я считаю, что это нужно где-то поправить.

Typel
4 декабря 2015 в 22:48
0

На днях я наткнулся на это: |=

Gordon
6 декабря 2015 в 15:08
0

@Typeless, вы имели в виду coderhelper.com/questions/3362626/…?

Typel
8 декабря 2015 в 17:24
0

@Гордон. Нет, я действительно видел это в популярном классе PasswordHash. Полная строка выглядит так: $diff |= ord($a[$i]) ^ ord($b[$i]);

Deduplicator
15 января 2016 в 23:19
0

@davejal: Убедитесь, что тег применяется, а не просто добавляете его вслепую.

mplungjan
1 сентября 2017 в 12:02
0

@dncrane - мне не удалось найти ... javascript (спред / остаток) rainsoft.io/how-three-dots-changed-javascript

Funk Forty Niner
17 сентября 2017 в 22:52
0

@Gordon Я недавно закрыл этот вопрос и хотел использовать этот вопрос и ответ, чтобы закрыть его, однако символ строки запроса ? здесь не включен. Я закрыл этот вопрос двумя другими вопросами, которые непосредственно касаются его. Считаете ли вы, что это должно быть добавлено сюда в этом вопросе и ответе?

Funk Forty Niner
20 сентября 2017 в 12:22
0

@Gordon Гиперссылка "... Распаковка аргументов (начиная с PHP 5.6)" для wiki.php.net/rfc/argument_unpacking сегодня в некоторых браузерах выглядит как "502 Bad Gateway". Возможно, вы захотите изучить это, и я не уверен, видели ли вы мой предыдущий комментарий чуть выше этого за несколько дней до этого. Я видел этот вопрос сегодня и собирался закрыть вопрос этим, но не могу, так как ссылка сейчас недействительна.

deceze
20 сентября 2017 в 12:28
0

@ Fred-ii- 1. Давайте придерживаться только синтаксиса PHP, ? в URL не имеет отношения. 2. Это вики сообщества, редактируйте / добавляйте по мере необходимости.

Funk Forty Niner
20 сентября 2017 в 12:30
0

@deceze Понятно. Хорошо, хорошо, если это не связано, тогда (я) не должен добавлять к нему, верно? Изменить: я вижу, вы исправили ссылку для ссылки ....

Mahmoud Zalt
23 ноября 2017 в 00:04
0

Вот названия всех операторов PHP (TOKEN). Ссылка php.net/manual/en/tokens.php ! [Введите описание изображения здесь] ( i.stack.imgur.com/P5ilY.jpg <1699796>396)

Ответы (23)

avatar
Peter Ajtai
12 ноября 2018 в 08:39
1242

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

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

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

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 (a-z и A-Z).


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

Lotus Notes
8 декабря 2010 в 23:49
169

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

Peter Ajtai
9 декабря 2010 в 10:47
15

@Lotus - я считаю это забавным фактом. Если вы новичок в PHP, C ++ и т. Д., Кажется довольно странным, что ++ i и i ++ достаточно разные, чтобы работать с разной скоростью. Я нашел это увлекательным.

Lotus Notes
9 декабря 2010 в 17:43
13

@Peter Ajtai: Да, это интересно, но судя по тому, как вы структурировали свой пост, вы делаете его одним из главных фактов PHP, который абсолютно необходим для использования языка.

avatar
28 марта 2022 в 02:28
0

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

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

avatar
5 января 2022 в 09:29
0

В php 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;

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

до:

switch ('A') {
  case 'A':
    echo "founded A";
    break;
  case 'B':
    echo "founded B";
    break;
}
res : founded A

после:

echo match ('A') {
  'A' => "founded A",
  'B' => "founded B",
};
res: founded A
avatar
Alberto Sinigaglia
24 сентября 2021 в 20:07
10

Оператор NullSafe "? ->" с php8

В 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
?>
IMSoP
3 июня 2020 в 17:32
1

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

Alberto Sinigaglia
3 июня 2020 в 17:37
0

@IMSoP Я с вами, однако меня пригласили сделать это здесь coderhelper.com/questions/62178354/… ...

IMSoP
3 июня 2020 в 17:46
0

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

Alberto Sinigaglia
3 июня 2020 в 17:54
0

@IMSoP, здесь, в StackOverflow, много вопросов о предложении C ++, и они не закрыты: несмотря на это, я с вами, что не размещать здесь этого оператора на данный момент

IMSoP
3 июня 2020 в 17:58
0

Я мало знаю о процессе C ++ и о том, когда разумно обсуждать предложения, и, честно говоря, этот вариант с большой долей вероятности преуспеет в модификации тренировки, но в целом для PHP предлагается много функций. которые никогда не попадают в язык, и пользователям было бы довольно сложно найти их все в списках литературы. Тем не менее, отчасти я здесь просто сварливый старик: P

Alberto Sinigaglia
3 июня 2020 в 18:01
0

Ахах @IMSoP, я здесь относительно новичок, я кодирую только в ближайшие 6 лет, так что я доверяю тебе, если ты скажешь мне, что это не его место, я его сниму

Umair Khan
21 сентября 2020 в 12:08
0

@ Berto99 Предложение оператора Nullsafe принято и реализовано в PHP 8. Пожалуйста, обновите свой ответ. Также обновите ссылку RFC.

avatar
Sherif
9 сентября 2021 в 15:16
335

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

Добавлено в 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;
    // return $b <=> $a; // for reversing order
});

rev
28 августа 2015 в 17:37
25

Не уверен, чем $a <=> $b отличается от $a - $b

mcrumley
25 сентября 2015 в 18:29
47

@AcidShout $a - $b работает для чисел, но не для строк, объектов или массивов.

Mark Amery
5 ноября 2015 в 15:54
58

@mcrumley Нет, это еще хуже. Обычно $a - $b не работает даже с числами; он работает только для целых чисел . Это не работает для нецелых чисел, потому что usort приводит возвращаемые значения вашей функции компаратора к int, что означает, что 0,5 приводится к 0, что означает, что два числа с разницей менее 1, например 4 и 4.6, могут (в зависимости от того, какой из них передается в качестве первого аргумента вашей функции компаратора) неправильно сравниваться как равные.

Mark Amery
15 января 2016 в 00:13
2

Шериф, зачем утверждать, что оператор возвращает «меньше 0», 0 или «больше 0», а не просто заявлять, что он возвращает 1, 0 или -1? Последнее является более точным и лаконичным; Я не понимаю, почему вы вернули эту деталь моего редактирования.

Alma Do
15 января 2016 в 13:04
2

Кстати, до PHP7 все еще существовал способ избежать блока if-else, который работал не только с числами: return $a < $b ? -1 : $a != $b;

Sherif
19 января 2016 в 21:38
0

@MarkAmery Потому что это задокументированное поведение.

Mark Amery
20 января 2016 в 18:54
1

@Sherif php.net/manual/en/migration70.new-features.php документирует это как 1 / 0 / -1, не говоря уже о том, что исходный RF > поступил аналогично. Я думаю, что это достаточная документация, чтобы оправдать включение здесь той же детали, и на данный момент я откатился назад; не стесняйтесь откатывать назад и продолжать этот аргумент, если вы все еще не согласны.

Sherif
20 января 2016 в 22:45
5

@MarkAmery руководство по миграции не является документированным поведением оператора. Для этого вы хотите посмотреть раздел языковых операторов в руководстве для этого php.net/language.operators.comparison фактическое поведение за этим зависит от различных функций сравнения API, например, когда вы выполнение strcmp для строк, где вы не можете гарантировать фактическое возвращаемое значение в каждом отдельном случае. Конечно, это почти всегда 1, 0 или -1, но в тех случаях, когда вы не можете гарантировать это, например, обертывание strcmp libc, вы предлагаете то же определенное поведение, что и базовая спецификация, чтобы быть в безопасности.

Sherif
20 января 2016 в 22:50
11

@MarkAmery Дело здесь в том, чтобы не позволять людям полагаться на неопределенное поведение. В одном случае, когда кто-то получает значение, отличное от 1, 0 или -1, вы заставляете кого-то заполнять отчет об ошибке, думая, что с языком что-то не так. Вот почему мы документируем, что все, что мы можем гарантировать, это то, что значение будет меньше, чем , больше, чем , или равно 0, и не обязательно 1, 0. , и -1.

bytepan
8 сентября 2021 в 21:18
1

вернуть $ b <=> $ a; // для реверсирования ордера

Sherif
9 сентября 2021 в 15:16
0

@bytepan правы. Я обновил комментарий 😉

avatar
16 июля 2021 в 09:49
0

Массивы 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 () -> Сортировка нескольких или многомерных массивов

avatar
Ankur Saxena
7 июля 2021 в 17:59
292
Синтаксис Имя Описание
x == y Равенство true если x и y имеют одинаковые пары ключ / значение
x != y Неравенство true если x не равно y
x === y Идентификация true если x и y имеют одинаковые пары ключ / значение
в одном порядке и одинаковых типов
x !== y Неидентификационные данные true если x не совпадает с y
x <=> y Космический корабль 0, если x равно y, больше 0, если x> y, меньше 0, если x <y
++x Предварительное приращение Увеличивает x на единицу, затем возвращает x
x++ Постинкремент Возвращает x, затем увеличивает x на единицу
--x Предварительный декремент Уменьшает x на единицу, затем возвращает x
x-- Постдекремент Возвращает x, затем уменьшает x на единицу
x and y И true, если и x, и y равны true. Если x = 6, y = 3, то
(x < 10 and y > 1) возвращает true
x && y И true, если и x, и y равны true. Если x = 6, y = 3, то
(x < 10 && y > 1) возвращает true
x or y Или true, если любой из x или y равен true. Если x = 6, y = 3, то
(x < 10 or y > 10) возвращает true
x || y Или true, если любой из x или y равен true. Если x = 6, y = 3, то
(x < 3 || y > 1) возвращает true
a . b Конкатенация Объедините две строки: «Привет». "Ха"
avatar
John Slegers
21 января 2021 в 13:52
153

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


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

  • $ a && $ b: ИСТИНА, если и $ a, и $ b истинны.
  • $ a || $ b: ИСТИНА, если $ a или $ b - ИСТИНА.
  • $ a xor $ b: ИСТИНА, если либо $ a, либо $ b истинно, но не оба одновременно.
  • ! $ 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 после подбора типов.
  • $ a! == $ b: ИСТИНА, если $ a не равно $ b или они не одного типа.
  • $ a <$ b : ИСТИНА, если $ a строго меньше $ b.
  • $ a> $ b : ИСТИНА, если $ a строго больше $ b.
  • $ a <= $ b : ИСТИНА, если $ a меньше или равно $ b.
  • $ a> = $ b : ИСТИНА, если $ a больше или равно $ b.
  • $ a <=> $ b : целое число меньше, равно или больше нуля, когда $ a соответственно меньше, равно или больше $ b. Доступно с PHP 7.
  • $ а? $ b: $ c : если $ a return $ b else return $ 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-ю степень (введено в 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 : ИСТИНА, если $ a и $ b имеют одинаковые пары ключ / значение.
  • $ a === $ b : ИСТИНА, если $ a и $ b имеют одинаковые пары ключ / значение в одном порядке и одного типа.
  • $ a! = $ B : ИСТИНА, если $ a не равно $ b.
  • $ a <> $ b : ИСТИНА, если $ 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. $ 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 : значение $ b присваивается $ a, если $ a равно нулю или не определено ( оператор присваивания объединения с нулевым значением - требуется PHP> = 7.4)

Примечание

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

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

В большинстве случаев вы, вероятно, захотите использовать && и || , которые ведут себя способом, известным из таких языков, как C, Java67226226. <22475>

stramin
29 июля 2019 в 18:41
1

В $a ?? $c есть ошибка, в нем говорится, что это то же самое, что и $a ? $a : $c, но тернарный оператор проверяет, истинно ли значение, с другой стороны, объединение null проверяет нулевые значения, поэтому, если $ a равно 0, вы будете получить 0 (поскольку 0 не является нулем), например, если у вас есть: $a=0; $c=5;, тогда $a?$a:$c возвращает 5, а $a??$c возвращает 0.

avatar
Webeng
7 декабря 2020 в 10:03
53

ВОПРОС:

Что означает =>?


ОТВЕТ:

=> Это символ, который мы, люди, решили использовать для разделения пар "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 в массиве ВО ВРЕМЯ инициализация значений в массиве.

avatar
John Conde
27 ноября 2020 в 22:25
11

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

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

Это NullSafe Operator, он возвращает null в случае, если вы попытаетесь вызвать функции или получить значения из null. Оператор Nullsafe может быть объединен в цепочку и может использоваться как для методов, так и для свойств.

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

Оператор Nullsafe не работает с ключами массива:

$drive['admin']?->getDriver()?->value //Warning: Trying to access array offset on value of type null

$drive = [];
$drive['admin']?->getAddress()?->value //Warning: Undefined array key "admin"
IMSoP
3 июня 2020 в 17:32
0

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

John Conde
3 июня 2020 в 17:33
0

Мы уже получаем вопросы по этому поводу. : / Если предложение не сработает, мы можем решить, стоит ли его оставить.

IMSoP
3 июня 2020 в 17:36
0

@JohnConde Я бы хотел закрыть их как не по теме, потому что они спрашивают о воображаемом языке программирования; или, возможно, «этот вопрос относится к другой части шкалы времени, проверьте настройки на своей машине времени»;)

John Conde
3 июня 2020 в 17:38
0

lol Эта мысль пришла мне в голову. Я спросил себя, принесет ли это пользу будущим посетителям, и на данный момент я ответил «да». Но это может измениться ...

IMSoP
3 июня 2020 в 17:42
0

@JohnConde Проблема в том, что мы пока не можем дать правильный ответ - фактическое поведение оператора может полностью измениться или никогда не быть добавлено, поэтому все, что мы пишем сейчас, может ввести в заблуждение с такой же вероятностью, как и информация. Единственный честный ответ - «синтаксическая ошибка, но есть вероятность, что она будет что-то значить в будущем».

John Conde
3 июня 2020 в 17:48
0

Не могу сказать, что не согласен с вашей точкой зрения. Я согласен с этим в качестве ответа.

Umair Khan
21 сентября 2020 в 12:06
0

@JohnConde. Предложение оператора Nullsafe принято и реализовано в PHP 8. Пожалуйста, обновите свой ответ. Также обновите ссылку RFC.

avatar
rajangupta
20 июня 2020 в 09:12
111

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

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

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

// 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
// Comparison is case-sensitive
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
avatar
Parth Nayak
20 июня 2020 в 09:12
34

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

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

Пример

$a = 5

  1. if ($a == 5) - вернет истину

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

  3. if ($a === 5) - вернет истину

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

avatar
30 сентября 2019 в 15:21
13

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

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

Пример 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

?>
mickmackusa
14 декабря 2020 в 01:10
0

[TODO] Включение новой функциональности в PHP8 для использования оператора splat с «именованными параметрами» ref: coderhelper.com/a/64997399/2943403

avatar
John Conde
1 мая 2019 в 08:17
17

Объявление типа возврата, допускающего значение NULL

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

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

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

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

Источник

avatar
Habeeb Perwad
19 февраля 2018 в 08:14
299

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

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

SherylHohman
1 июля 2020 в 01:54
0

Есть идеи, что такое функция двойного подчеркивания? __(). Используется в WordPress. Я не могу найти определение для него где-нибудь . Пример его использования: core.trac.wordpress.org/browser/tags/5.4/src/wp-admin/includes/…. Кажется, что для использования фильтра WP image_size_names_choose() необходимо использовать __() для добавления «короткого имени» в массив named_sizes, который вы хотите добавить.

Mohammed H
2 июля 2020 в 03:08
2

@SherylHohman Похоже, это функция перевода. developer.wordpress.org/reference/functions/__

SherylHohman
3 июля 2020 в 07:24
0

Огромное спасибо! Я завидую вашим превосходным навыкам в Google (и обширным знаниям в области программирования) :-)

avatar
VIPIN A ROY
16 февраля 2018 в 14:14
73

Оператор объединения с нулевым значением (??)

Этот оператор был добавлен в 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';
?>
avatar
6 декабря 2017 в 16:05
31

Оператор Null Coalesce "??" (Добавлено в PHP 7)

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

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

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.

avatar
mnv
23 мая 2017 в 12:02
80

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

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

$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
Andrei
5 сентября 2017 в 12:15
5

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

avatar
dev.mraj
20 марта 2017 в 05:37
41

Вопрос :

Что означает "&" здесь, в 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
avatar
Ankur Saxena
19 сентября 2016 в 12:15
469

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

Что такое бит? Бит - это представление 1 или 0. Обычно ВЫКЛ (0) и ВКЛ (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.

Aycan Yaşıt
28 сентября 2013 в 09:35
6

Что, если $ a принимает значение больше 255?

AlbertSamuel
17 мая 2016 в 03:42
0

@ AycanYaşıt Большая часть операционной системы использует 32-битную и 64-битную системы, что означает, что ограничение намного превышает 255 (8 бит).

Kaii
16 апреля 2018 в 21:53
0

@ AycanYaşıt На самом деле представление здесь с длиной в один байт даже неверно, так как даже самое маленькое целое число по-прежнему 64-битное (8 байт) в памяти на современной 64-битной платформе.

Vi_real
13 февраля 2019 в 21:47
2

Почему and & - это 0 0 0 0 1 0 0 0, а or | - это 0 0 0 0 1 0 1 1?

avatar
Maulik patel
13 марта 2016 в 01:16
163

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

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)
Ryan Vincent
24 февраля 2014 в 11:38
8

Вышеупомянутое также работает с «интерфейсами». Это полезно для проверки доступности определенного интерфейса.

avatar
devpro
2 февраля 2016 в 13:13
68

Строки 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
PHPFan
26 ноября 2017 в 03:48
0

@ Rizier123: Что означает «Heredocs не могут использоваться для инициализации свойств класса. Начиная с PHP 5.3, это ограничение действует только для heredocs, содержащих переменные.»?

avatar
n.1
21 февраля 2014 в 00:42
253

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

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

Источник