php разница между and и
Заметки Лёвика
web программирование, администрирование и всякая всячина, которая может оказаться полезной
Статья для новичков, но как ни странно, имел возможность пообщаться
с программистами (опытом более двух лет), которые не всегда понимают этот момент.
На первый взгляд может показаться, что это избыточное дублирование (применительно к программированию почти всегда есть несколько способов достичь один и тот же результат). Однако, между ними имеется разница. Конечно же, она описана в мануале, но из-за невнимательного чтения даже те, кто заглядывал в документацию могли её не заметить. Разница в приоритете операций.
приоритет логических операций в PHP
Пример для наглядной демонстрации (особое внимание следует обратить на расстановку поясняющих скобок в комментариях):
Использование or для условного выполнения.
Часто в коде можно встретить примеры использования or без всяких if.
mysql_connect(. ) or die(‘DB error’);
Метки: php
Опубликовано Четверг, Апрель 18, 2013 в 08:08 в следующих категориях: Без рубрики. Вы можете подписаться на комментарии к этому сообщению через RSS 2.0. Вы можете оставить комментарий. Пинг отключен.
Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)
html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)
ссылка (для отправки по почте)
PHP — зачем операторы or и and?
Зачем в пыхе есть операторы or, xor и and если есть &&, ||, &, |?
И в чем собсно отличие && от &, || от |?
Вероятно сделали по аналогии с С:
то есть, всего лишь для облегчения/быстроты набора?
И зачем он? Какое-то говнище с проектированием если программисту вдруг понадобился приоритет оператора.
Чтобы можно было делать вот так:
Выше тебе написали пример.
Мне не нужно цитировать описание, я его прочитал. Я не понимаю разницы, вот в упор между нулем и false.
То есть, я не вижу задачи, где просто невозможно применить || вместо |.
Я не понимаю разницы, вот в упор между нулем и false.
Разница в их выполнении интерпретатором. Например, в случае логических операторов в выражении УСЛОВИЕ1 || УСЛОВИЕ2 второе условие выполнено (проверено) не будет если первое верно.
Разве не сработает бла-бла-бла || die(. )?
запись бла-бла-бла or die() позволяет не думать ВООБЩЕ о приоритете, у тебя or гарантировано отработает последним.
Фактически ты пишешь код, а потом на автомате вставляешь через or die() обработчики ошибок и пр.
То есть, я не вижу задачи, где просто невозможно применить || вместо |.
Примени || вместо | с какими-либо битовыми флагами, ага.
Это потому, что вместо запустить интерпретатор и попробовать, ты прёшься сюда плодить тупак.
PHP — зачем?
Чтобы код был красивее и понятнее.
Чё, лабы по C++ «сдал» с помощью LOR’а, и тебя на пыхе заставили кодить? Отлична, это теперь твоё будущее, смирись с ним.
Я не понимаю разницы, вот в упор между нулем и false.
А разницу между true и 42 понимаешь?
Про битовые маски почитай, например.
То есть, я не вижу задачи, где просто невозможно применить || вместо |.
То есть, я не вижу задачи, где просто невозможно применить || вместо |.
Как часто битовые операции бывают нужны с PHP?
«Удалите эту фичу, мне она не нужна»?
Как часто битовые операции бывают нужны с PHP?
Как минимум для работы с предопределёнными стандартными константами вроде E_STRICT, LOCK_NB или SORT_FLAG_CASE.
Может он фанатик-гномосек и для него фичи это слишком сложно. К умственным инвалидам таки надо проявлять сочувствие, главное не потакать.
Может он фанатик-гномосек и для него фичи это слишком сложно. К умственным инвалидам таки надо проявлять сочувствие, главное не потакать.
А может он просто задал вопрос без всякой задней мысли, а в ответ получил «мнение» от закомплексованного недотепы.
А может он просто задал вопрос без всякой задней мысли
Таки зачем тебе частота использования битовых операций? Курсовую по пыху пишешь что ли?
Таки зачем тебе частота использования битовых операций?
&& || применяются к числам когда or and только к bool
Как часто битовые операции бывают нужны с PHP?
очень часто,особенно на этапе оптимизации работы с бд
&& || применяются к числам когда or and только к bool
Эволюция PHP — от 5.6 до 8.0 (Часть 1)
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP».
Шпаргалка по изменениям в PHP v7.x
После релиза PHP версии 7.3 я решил уделить больше внимания развитию PHP: что собственно развивается и в каком направлении искать понимание потенциала и оптимизации этого невероятно популярного языка программирования.
PHP 7.0
Анонимный класс может использоваться вместо именованного класса:
Когда класс не нужно документировать
Когда класс во время выполнения используется только один раз
Функция целочисленного деления — безопасный способ деления (даже на 0).
Возвращает целочисленный результат деления первого операнда на второй. Если делитель (второй операнд) равен нулю, функция пробрасывает EWARNING и возвращает FALSE.
Используется для оптимизации и упрощения операций сравнения.
В теле функций генераторов разрешен следующий новый синтаксис:
Повышение производительности
PHP 7 почти вдвое быстрее, чем PHP 5.6.
Значительное сокращение использования памяти
Как видно из диаграмм, PHP 7.0 стал громадным шагом вперед с точки зрения производительности и использования памяти. Для страницы с запросами к базе данных версия 7.0.0 более чем в 3 раза быстрее, чем 5.6 с включенным opcache в 2.7 раза быстрее без opcache! С точки зрения использования памяти разница тоже существенная!
Классы исключений были реструктурированы к более контринтуитивной схеме именования, которая приведет к меньшей путанице, особенно для новых пользователей.
⚠ Внимание! Вы можете реализовать Throwable только через Error и Exception .
С этим нововведением глобально зарезервированные слова стали полу-зарезервированными:
PHP 7.1
В отличие от других типов, которые принудительно применяются при вызове функции, этот тип проверяется во время компиляции, что означает, что ошибка возникает без необходимости вызова функции.
Функция с типом возврата void или void функция может либо возвращать неявно, либо иметь оператор возврата без значения:
Параметры, объявленные как iterable могут использовать null или массив в качестве значения по умолчанию.
Синтаксис квадратных скобок для list()
20 неожиданностей в PHP, о которых знают не все
Ниже поговорим про неожиданные, нестандартные, необычные, не очевидные, странные или особенные ситуации/случаи в PHP.
explode() в 2 раза быстрее unserialize()
Если для сохраняемых чисел не важен тип (число), лучше хранить числа через запятую, чем их же сериализовать.
Точное сравнение: 0 == ‘строка’
PHP язык без строгой типизации и потому иногда могут возникать неожиданные результаты при сравнении (проверке) разных значений.
Так например можно пропустить переменную запроса:
Все следующие значения одинаковы, при сравнении через == (не строгий оператор сравнения):
in_array() нас обманывает
Вы мастер массивов в PHP. Вы уже знаете все о создании, редактировании и удалении массивов. Тем не менее, следующий пример может вас удивить.
AND и &&
Полезная ссылка по этой теме: Приоритет оператора
Шунтирующие операторы (короткая запись)
count() не всегда дает ожидаемый результат
isset() и null
Странное поведение в PHP при передаче значения foreach по ссылке
empty() и объекты
Однако если разобраться, то нет тут ничего удивительного и все логично!
А теперь, зададим значение свойства bar в __isset() и empty() его получит:
Увеличитель числа ++
Имеет большое значение в каком положении использовать ++ (инкремент, увеличитель).
Увеличение строки ++
С числами все довольно просто, но что будет если инкрементить строки?
Этот момент хорошо описан в официальной документации по операциям инкремента/декремента, однако многие не читали этот материал, потому что не ожидали встретить там ничего особенного.
Неточности с плавающей точкой
Посчитайте эту арифметику и скажите результат:
Сколько получилось, 8? А у компьютера 7!
Что получается в итоге и где ошибка?
Однако, если посчитать так, то увидим 0.8, а не 0.79999999999. Хотя этот результат является лишь округлением:
А вот пример сериализации дробного значения:
Какой вывод можно сделать из этого примера? Будьте очень осторожны, когда дело касается дробных чисел (чисел с плавающей точкой) и никогда им не доверяйте.
Все объекты в PHP передаются по ссылке
Это свойство объектов вам возможно известно, но даже в этом случае можно поймать баг, поэтому при работе с объектами будьте внимательны.
Для примера, давайте рассмотрим такой код, когда мы используем объект для удобства, который создается из массива:
Мы создали казалось бы общие данные, который потом планируем использовать в разных переменных, меняя данные объекта где нужно, а где не нужно оставляя исходный вариант. В этом случае изменение данных будет менять их и в исходном варианте.
Так, например, если использовать массив, то все будет работать как мы ожидаем. Тот же код но с массивом:
Поэтому чтобы первый вариант работал правильно, в переменную нужно передавать копию объекта, создаваемую с помощью clone :
Сложение массивов
При сложении массивов элементы добавляемого массива не заменяют исходные, как это часто ожидается.
Изменение типа данных в ключах массива
При создании индекса массива PHP автоматически преобразовывает тип данных. Это надо учитывать, при работе с ассоциативными массивами. Так например, если в индекс передать число в виде строки (‘555’), то в индексе оно станет числом, или если в индекс передать true, то оно станет числом 1, а вот null превратиться в пустую строку. Пример кода см. ниже.
Дополнительно с ключом key будут сделаны следующие преобразования:
Closure::call — вызов анонимной функции с указанием контекста
Это не столько неожиданность, сколько интересная особенность, о которой мало кто знает.
PHP замыкания (анонимные функции) можно вызывать передавая в них контекст (объект). В результате замыкание можно использовать как метод переданного объекта.
Для этого в объекте замыкания есть метод:
Пример того как это использовать
Что мы видим? При вызове одного и того же замыкания мы получаем разный результат, который зависит от контекста вызова (от того какой объект передается и используется в замыкании).
Рекурсивная анонимная (лямбда) функция
Пример ниже показывает как можно создать рекурсивное замыкание. Другими словами как можно создать анонимную функцию и использовать её рекурсивно саму в себе.
Все это может показаться бредом, но как ни странно такие функции мне иногда нужны из-за удобства. Поэтому хорошо бы знать, что такое можно делать в PHP.
Передача по ссылке переменных это дело понятное, а вот ссылки для вызова функции/метода — не совсем. Нужна такая штука для передачи по ссылке переменных с которыми работает функция/метод. Рассмотрим на примере:
Аналогичный пример с объектом:
Рассмотрим еще один пример, где наглядно видно отличие вызова по ссылке и без:
Ссылку из функции можно передавать в другую функцию, которая ожидает ссылку:
Передача функций по ссылке никак не связана с производительностью (ею занимается PHP). Подробно читаем в документации.
isset() в 2 раза быстрее in_array()
Скорости очень быстрые, но если обрабатываются большие массивы, то есть смысл заюзать array_flip() и искать значение через isset() :
Отличие Javascript от PHP
Почему-то мои статьи в основном воспринимаются, как статьи для новичков, но, если что, я стараюсь писать для всех, и, более того, ориентируюсь больше на знающих людей, чем на новичков :). Поэтому не поддавайтесь заголовку: возможно, вы сможете найти для себя что-нибудь полезное.
В статье я хотел бы рассказать о некоторых прикольных моментах, с которыми может столкнуться разработчик на каком-нибудь динамическом языке, когда увидит PHP, или наоборот, разработчик на PHP, когда будет изучать какие-то другие динамические языки. Статические языки я не рассматриваю, ибо там вроде как всё итак понятно.
Автор, о чём топик-то? Кому вообще нужен твой PHP?
Причина, по которой я решил написать этот топик, проста: я бы хотел чуть-чуть просветить людей, которые не пишут на PHP (или очень мало писали на PHP) о некоторых интересных моментах в этом языке, о которых довольно-таки мало говорят. Я ни в коем случае не хочу никого убеждать, что PHP лучше, чем те же Python, Ruby, Javascript, [подставьте сюда свой любимый язык для веба]: более того, я так и не считаю. Мне просто «за державу обидно», когда на PHP наезжают, просто утверждая, без аргументов, что это плохой язык.
Интересные отличия PHP от Javascript
В качестве эталонного динамического языка я возьму JS, потому что, скорее всего, его все знают, кто пишет для веба. Ну а для тех, кто пишет на PHP и не знает JS, эта статья, наверное, может быть полезной в том плане, что она поможет лучше понять Javascript.
Всё, кроме объектов — значения
В PHP есть множество встроенных типов, и ни один из них не ведет себя, как объект. У встроенных типов нет свойств, методов и т.д. В этом плане PHP напоминает обычный C. Это играет роль, когда мы перейдем к следующему утверждению:
По умолчанию, всё передается по значению, и объекты тоже
В PHP попытались возвести в абсолют концепцию языка С, что всё передается по значению. И они поначалу сделали это даже для объектов, но потом немного поменяли концепцию — объекты по-прежнему являются значениями, но это значение представляет из себя ссылку на инстанс класса.
Давайте рассмотрим простой пример:
Пример очень простой, но, ИМХО, довольно показательный. Давайте рассмотрим другой, как мне кажется, более прикольный, пример.
Чувствуете :)? Замыкание по значению или по ссылке!
Респект тем, кто понимает, почему так происходит в JS, хоть это и канонический пример. А вот в PHP всё предсказуемо с точки зрения разработчиков на PHP, которые привыкли к тому, что всё передается по значению.
Конкатенация строк
Также, в PHP есть отдельный оператор конкатенации: точка [.]. Простой пример:
В Javascript [ 3 + ‘3’ ] это будет 33. Пичалька. Впрочем, в некоторых других динамических языках вам просто не дадут сложить строку и число без явного преобразования типов. Хорошо.
Copy-on-write
Вот об этом точно далеко не все знают. Если вкратце: хоть в PHP и всё передается по значению, но, на самом деле, копирование происходит далеко не всегда. Оно происходит, когда значение изменяется внутри конструкции, как, например, было в первом примере. Но это не единственный случай, когда создается копия. Подробнее об этом по ссылке.
В PHP у хеш-массива можно легко узнать длину
Ну это, я считаю, позор для разработчиков JS: они бы точно могли бы добавить какое-нибудь, скажем, магическое, свойство length всем объектам…
По умолчанию, все переменные внутри функции в PHP локальны
В PHP полностью инвертированный подход к области видимости для функций, по сравнению с JS: любые глобальные переменные нужно явно объявлять, и все созданные переменные внутри функции по умолчанию локальны. Специально для новичков: не забывайте var в функциях JavaScript :).