Перейти к содержимому

Как обозначается эквивалентность в php

  • автор:

Операторы

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

Операторы можно сгруппировать по количеству принимаемых ими значений. Унарные операторы принимают только одно значение, например, ! (оператор логического отрицания) или ++ (инкремент). Бинарные операторы принимают два значения; это, например, знакомые всем арифметические операторы + (плюс) и — (минус), бо́льшая часть поддерживаемых в PHP операторов входит в эту категорию. И на последок, существует всего один тернарный оператор, ? : , принимающий три значения, обычно о нём говорят просто — «тернарный оператор» (хотя, возможно, более точным названием было бы «условный оператор»).

Весь список PHP-операторов перечислен в разделе «Приоритет оператора». В этом разделе также описан порядок выполнения операторов и их ассоциативность, которые точно определяют, как вычисляются выражения с несколькими разными операторами.

Improve This Page

User Contributed Notes 4 notes

20 years ago

of course this should be clear, but i think it has to be mentioned espacially:

AND is not the same like &&

the second
a and (b or c)

’cause || has got a higher priority than and, but less than &&

of course, using always [ && and || ] or [ AND and OR ] would be okay, but than you should at least respect the following:

the first code will set $a to the result of the comparison $b with $c, both have to be true, while the second code line will set $a like $b and THAN — after that — compare the success of this with the value of $c

maybe usefull for some tricky coding and helpfull to prevent bugs 😀

3 years ago

Operator are used to perform operation.

Operator are mainly divided by three groups.
1.Uniary Operators that takes one values
2.Binary Operators that takes two values
3.ternary operators that takes three values

Operator are mainly divided by three groups that are totally seventeen types.
1.Arithmetic Operator
+ = Addition
— = Subtraction
* = Multiplication
/ = Division
% = Modulo
** = Exponentiation

2.Assignment Operator
= null coalescing

14.Clone new Operator
clone new = clone new

15.yield from Operator

yield from = yield from

16.yield Operator
yield = yield

17.print Operator
print = print

23 years ago

Other Language books’ operator precedence section usually include «(» and «)» — with exception of a Perl book that I have. (In PHP «<" and ">» should also be considered also). However, PHP Manual is not listed «(» and «)» in precedence list. It looks like «(» and «)» has higher precedence as it should be.

Note: If you write following code, you would need «()» to get expected value.

$bar = true ;
$str = «TEST» . ( $bar ? ‘true’ : ‘false’ ) . «TEST» ;
?>

Without «(» and «)» you will get only «true» in $str.
(PHP4.0.4pl1/Apache DSO/Linux, PHP4.0.5RC1/Apache DSO/W2K Server)
It’s due to precedence, probably.

15 years ago

The variable symbol ‘$’ should be considered as the highest-precedence operator, so that the variable variables such as $$a[0] won’t confuse the parser. [http://www.php.net/manual/en/language.variables.variable.php]

  • Справочник языка
    • Основы синтаксиса
    • Типы
    • Переменные
    • Константы
    • Выражения
    • Операторы
    • Управляющие конструкции
    • Функции
    • Классы и объекты
    • Пространства имён
    • Перечисления
    • Ошибки
    • Исключения
    • Fibers
    • Генераторы
    • Атрибуты
    • Объяснение ссылок
    • Предопределённые переменные
    • Предопределённые исключения
    • Встроенные интерфейсы и классы
    • Предопределённые атрибуты
    • Контекстные опции и параметры
    • Поддерживаемые протоколы и обёртки
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    php оператор эквивалентности

    браузер не пишет 1, то есть не считает его эквивалентным? А автор показывает что результат у него 1. У кого ошибка?

    Отслеживать
    21k 4 4 золотых знака 29 29 серебряных знаков 51 51 бронзовый знак
    задан 2 сен 2015 в 9:35
    53 7 7 бронзовых знаков

    1) почему кавычки в выводе? 2) если убрать кавычки, то почему в ($string==$num)=$bool вы присваиваете выражению ($string==$num) значение $bool ? Там должен быть знак ==

    Commented 2 сен 2015 в 9:40

    Посмотрите в первоисточник php.net/manual/ru/types.comparisons.php Таблица Гибкое сравнение с помощью ==

    Commented 2 сен 2015 в 9:49
    @BOPOH, это строка. там только переменные подставляются, но не вычисляются выражения.
    Commented 2 сен 2015 в 9:50

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

    Commented 2 сен 2015 в 9:51
    @sandy, строго говоря == это оператор равенства. А вот === — оператор эквивалентности.
    Commented 2 сен 2015 в 13:52

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

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

    Как написано в мануале, «Если сравниваются строки, и обе могут быть приведены к числам, то они приводятся, и сравниваются как числа».

    Здесь же мы имеем только одну строку с числом, и в этом случае РНР не приводит операнды к числам, и сравнивает две строки как строки.

    Пример же в учебнике касается сравнения переменных разных типов — числа и строки. При котором любая строка, не приводящаяся к числу, будет приравнена к нулю (а не только пустая):

    echo "(0=='PHP')=".json_encode(0=="PHP"); 

    А вот что, скорее всего, имелось в виду в учебнике — это что и 0 и «» приравниваются к FALSE в операторах, требующих булев аргумент.

    Мораль: учебник выкинуть и читать мануал.

    Помогите с оператором эквивалентности [закрыт]

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

    Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

    Закрыт 3 года назад .
    Помогите разобраться, ответ должен быть 15b но браузер показывает 15:

    $a = 5; //тип integer $b = "10b"; //тип string $sum = $a + $b; echo "Сумма двух чисел = $sum"; 

    Отслеживать
    1,497 1 1 золотой знак 16 16 серебряных знаков 34 34 бронзовых знака
    задан 23 сен 2020 в 0:06
    Emin Mammadov Emin Mammadov
    9 2 2 бронзовых знака

    Дайте полные условия задачи. Из 5 и «10b» можно многими способами получить «15b» , но что-то мне подсказывает, большинство будут работать только с 5 и «10b» , а с другими данными результат будет ошибочный.

    Commented 23 сен 2020 в 6:32

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    Приведенный Вами пример иллюстрирует автоматическое приведение типов в php

    Так как + является оператором сложения чисел, строка «10b» преобразовывается в число. Если использовать оператор сложения строк . , получится 510b . В любом случае, ответ никак не должен быть 15b .

    Оператор эквивалентности === нужен тогда, когда нужно сравнить не только результаты выражений, но также их типы, например:

    var_dump(10 == "10b"); // true var_dump(10 === "10b"); // false 

    Отслеживать
    ответ дан 23 сен 2020 в 5:30
    Максим Степанов Максим Степанов
    2,396 2 2 золотых знака 11 11 серебряных знаков 21 21 бронзовый знак
    ну и чего 15b то как из этого получить?
    Commented 23 сен 2020 в 6:04
    @teran $sum = ($a + $b) . preg_replace(‘/[0-9]+/’, », $b); xD
    Commented 23 сен 2020 в 6:27

    @teran я нашел статью, где этот пример, и исходя из контекста статьи подумал, что вопрос не в получении 15b alekseygulynin.ru/operator-ekvivalentnosti-v-php

    Commented 23 сен 2020 в 7:36

    да, похоже на то, что автор думает, что из этого должно получиться 15b , а не хочет получить это значение

    Commented 23 сен 2020 в 7:47

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

    Оператор эквивалентности PHP

    Оператор эквивалентности PHP

    Достаточно часто появляется такая проблема в PHP, решением которой является использование оператора эквивалентности. Дело в том, что PHP любит преобразовывать типы, и, с одной стороны, это хорошо. Например, при сложении числа и строки, строка преобразуется в число и складывается. В результате, всё хорошо. Но бывают случаи, когда такое преобразование плачевно. Пример? Читайте далее.

    Допустим, у Вас есть две переменные:

    $var_1 = 0;
    $var_2 = «»;
    if ($var_1 == $var_2) echo «Переменные равны»;
    ?>

    Как Вы и догадались, PHP нам выведет, что переменные равны. Но разве 0 равен пустой строке? Разумеется, нет. А почему так произошло? Всё достаточно просто: 0 для PHP — это false (другие числа — это true), а пустая строка — это тоже false (если она не пустая, то PHP считает её true). В итоге, у нас оба операнда стали false, и, очевидно, что они равны. То есть в данном примере мы явно видим, что преобразование сработало неверно. И поверьте моему опыту, данных засадных мест встречается очень много.

    Теперь встаёт вопрос: «Как бороться с этим?«. Как Вы догадались из названия статьи, с помощью оператора эквивалентности PHP, который обозначается так «===«. Данный оператор сверяет не только значения (как делает оператор сравнения, используемый нами выше), но и типы. То есть чтобы проверка эквивалентности выдала true необходимо совпадение не только значений, но и типов. Давайте проверим это:

    $var_1 = 0;
    $var_2 = «»;
    if ($var_1 === $var_2) echo «Переменные равны»;
    else echo «Переменные не равны»;
    ?>

    Результатом выполнения скрипта будет вывод строки: «Переменные не равны«, чего мы с Вами и добивались. То есть значения переменных равны, но их типы не совпадают (одна переменная integer, а другая string), поэтому оператор эквивалентности вернул false и отправил нас в блок else, где мы и вывели соответствующую строку.

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

    Создано 06.11.2010 09:24:52

  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:
    Она выглядит вот так:
  2. Текстовая ссылка:
    Она выглядит вот так: Как создать свой сайт
  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии ( 6 ):

lagprincesse 24.06.2013 20:52:07

в браузере говорит «!», а ведь должен говорить «?» — почему так, подскажите, плиз

Admin 24.06.2013 21:21:25
lagprincesse 24.06.2013 21:29:27

да,но значение строки «hhh» — true, а 0 — false? значит, в данном случае должно быть «?» на выходе? или я что-то не правильно поняла?:(

Admin 25.06.2013 10:35:27

Вы проверяете на равенство, очевидно, что true не равно false, поэтому и выводится !.

ytuber_vladzio 30.12.2016 20:25:01

но если true не равно false, условие не выполняется и по этому должно выводить else тоесть «?»

ramazan 18.01.2014 23:00:56

Прочитав про false и true, я тоже немного растерялся и не мог понять, почему же , если «hhh» возвращает TRUE, а 0 возвращает FALSE , почему же они равны. А дело, как оказалось, в том, что если один из операндов логического оператора может трактоваться как число, то оба операнда трактуются как числа. При этом пустая строка превращается в 0, который затем и сравнивается с нулем. Ссылка — http://www.php.su/learnphp/operators/?equiv Попробуйте, как сделал я : $a приравняйте к какому-то другому числу, 5, например. И увидите, что возвратится ваш «?», т.к. «hhh» преобразуется в число 0, а 0 и 5 не равны. Надеюсь, помог.

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *