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


Оглавление (нажмите, чтобы открыть):

Побитовые операторы (И) в PHP. Получение странных ответов

Поэтому я создаю этот скрипт, который должен получить целое число от оператора & из двух чисел в PHP. До сих пор мне удалось работать, но с небольшими номерами ( echo 65535 $ 2048; Я получаю результат 0, когда он должен быть 2048. Любые идеи, почему я получаю этот результат или как я могу получить желаемый результат?. Спасибо заранее, я использую PHP 5.5 и Ubuntu.

$ не является and оператором, & is.

Если вы пытаетесь:

вы должны получить 2048 штраф, как я только что сделал на http://sandbox.onlinephpfunctions.com/.

Когда вы пытаетесь запустить это:

Вы получите эту ошибку:

Для моего кода случая:

Выход 2048

Примечание. У вас есть опечатка, где должно быть & inplace of $. потому что $ is not и operator, но & is.

PHP / побитовые операторы левый сдвиг

Может кто-нибудь, пожалуйста, объясните мне, почему это равно 32 ?

Я прочитал руководство и узнал, что немного сдвинулся влево, но все еще не совсем понял концепцию.

Решение

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

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

Затем мы оставили сдвиг на два:

потому что если мы проверим биты:

Но мы получаем 32 в результате, почему это? Ну, потому что в этом случае + приходит первым Сначала оценивается сумма (2 + 1) и только потом сдвигается. Ваш код такой же, как 4 ,

Если мы проверим шаги, как и раньше, но знание оно будет суммироваться первым, оно фактически сразит его на 3, а последнее значение будет иметь 6 бит.

И если мы преобразуем значение, которое было смещено на 3 (100000), мы получим 32 ,

Articles of побитовые операторы

Побитовый результат операции, странное поведение при выводе

Как работает побитовый оператор XOR (‘^’)?

Я немного смущен, когда вижу результат следующего кода: $x = «a»; $y = «b»; $x ^= $y; $y ^= $x; $x ^= $y; echo $x; //Got b echo $y; //Got a Как работает здесь оператор?

Понимание PHP & (амперсанда, побитового и) оператора

Я часто использую ($var & 1) в своем коде, который возвращает true, если $var является нечетным числом и false, если это четное число. Но что делает «&» на самом деле?

return return return ($ var & 1)?

Я прочитал PHP Manuel о array_filter 1, «b»=>2, «c»=>3, «d»=>4, «e»=>5); $array2 = array(6, 7, 8, 9, 10, 11, 12); echo «Odd […]

C & PHP: Сохранение настроек в целых числах с помощью побитовых операторов?

Я не знаком с побитовыми операторами, но, похоже, раньше они использовали для хранения простых настроек. Мне нужно передать несколько функций включения / выключения функции, и я хотел бы использовать для этого одно целое. Как я могу настроить параметры и прочитать эти параметры?

Побитовые сдвиги в php

Есть число размером 32 бита со значением 967968174. В число были записаны параметры которые занимали 2, 3, 9, 9, 9 битов, и были записаны слева направо с использованием побитового сдвига влево » $form = (967968174 & 3);
$color = ((967968174 & 28) >> 2);
$angle = ((967968174 & 16352) >> 5);
$w >> 14);
$height = ((967968174 & 4286578688) >> 23);

1 ответ 1

Если не сдвигать, то получатся оооочень большие значения. Посмотрите, например, что ляжет в переменную $angle без сдвига (1440 -> 0b0101 1010 0000) и со сдвигом (45 -> 0b0010 1101). Т.е. сдвиг и нужен как раз для того, чтобы получить исходные значения.

Пример: нам нужно записать параметр в виде числа 5 (0b101) в верхние биты 16-битного числа. Для этого мы применяем сдвиг влево на 13 и получаем 0b10100000 00000000). Потом мы еще записываем разные параметры и в итоге получаем что-то вроде 0b10100110 00111011). Чтобы достать первый параметр нам нужна маска 0b11100000 00000000 (0xE000). Применив её, получим 0b10100000 00000000. Но нам-то нужно 5, а не это большое число. Вот тут и нужен сдвиг вправо на 13, как операция обратная сдвигу влево. Отбрасываем последние 13 нулей и получаем 0b101, т.е. то, что изначально записали.

PHP: Побитовые операторы PHP

Всем привет!
Продолжаем изучать основы PHP с нуля!
В этом уроке я расскажу вам о распространенных операторах php.
Для чего нужны эти операторы php?
С помощью различных операторов php вы сможете сравнивать и изменять значения в переменных (операторы определяют необходимое действие, которое нужно проделать с переменными).
Не знаю, есть ли смысл рассматривать все операторы для начинающих? Боюсь вас запутать, а еще хуже, отбить желание изучать php.
Сделаем так, я напишу категории всех операторов, но рассмотрим только некоторые, те, которые часто используются и пригодятся нам для изучения «Основ PHP». А у кого появится желание изучать дальше PHP, информацию об остальных операторах можно найти в интернете или книгах по изучению PHP.

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

» Строковые операторы PHP

» Побитовые операторы PHP

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

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

» Операторы инкремента и декремента PHP

» Операторы исполнения PHP

» Операторы работы с массивами

» Операторы управления ошибками PHP


» Операторы классов PHP

Арифметические операторы PHP
Здесь обычная математика 5 класса.
Арифметические операторы PHP позволят нам провести различные арифметические операции над числовыми типами данных.

Арифметические операторы
Оператор Пример Название
+ $a + $b Сложение
$a — $b Вычитание
* $a * $b Умножение
/ $a / $b Деление
% $a % $b Остаток от деления

Что такое остаток от деления?
Это число, которое остается в самом низу при делении в столбик:

Результат: 4
Результат: 4
Результат: 16
Результат: 8
Результат: 2

Приоритет арифметических операторов

* , / , % имеют одинаковый приоритет и выполняются поочередно слева направо
+ , — имеют одинаковый приоритет и выполняются поочередно слева направо

То есть, все как учили в школе: вначале делается умножение и деление, а потом прибавление и отнимание.

Если нужно, чтобы прибавление или отнимание делались первыми, тогда достаточно отделить часть выражения круглыми скобками (), вот например:

Логические операторы PHP
Логические операторы предназначены для работы с логическими выражениями и возвращают false (лож) или true (истина).
Так как у меня мышление ассоциативное, то и пример для лучшего понимания будет ассоциативным.
Итак, предположим, что false это «0», а true это любое не нулевое число.

Логические операторы PHP
Оператор Пример Название
and $a and $b И
or $a or $b Или
xor $a xor $b Исключающее или
! !$a Отрицание
&& $a && $b И
|| $a || $b Или

Пример для понимания

Если замените в строке №2 значение « true » на « false », то в результате будет на экране « значение false »

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

Строковые операторы
Оператор Пример Название
. $a . $b оператор конкатенации
.= $c .= оператор конкатенации и присваивания

Кстати, вы уже немного знакомы со строковыми операторами, я в статье « Вывод переменной и строки в php на экран » (урок №6) немного об этом рассказывал.
Найдите там пункт «Престыковка переменных (конкатенация строк)» и посмотрите на примеры.

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

Операторы присвоения
Оператор Пример Название
= $a = 3 присвоит

Присвоить обозначается знаком « = ».
Оператор присваивания означает, что левый операнд получает значение правого выражения:

Переменной $a было присвоено значение «4».

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

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

Операторы сравнения
Оператор Пример Название
== $a == $b равно
=== $a === $b Тождественно равно
!= $a != $b Не равно
<> $a <> $b Не равно
!== $a !== $b Тождественно не равно
$a > $b Больше
= $a >= $b Больше или равно

полная брехня, переменные не равны

Если вы замените значение у переменной $a на «5», то результат будет положительным – «все верно, переменные равны».

Операторы инкремента и декремента PHP

Операции инкремента и декремента
Оператор Пример Название
++ ++$a Префиксный инкремент
++ $a++ Префиксный инкремент
—$a Префиксный декремент
$a— Префиксный декремент

++$a Увеличивает $a на единицу и возвращает значение $a.

$a++ Возвращает значение $a, а затем увеличивает $a на единицу.

—$a Уменьшает $a на единицу и возвращает значение $a.

$a— Возвращает значение $a, а затем уменьшает $a на единицу.

было 5, а стало 6

Операторы работы с массивами

Операторы работы с массивами
Оператор Пример Название
+ $a + $b Объединение. Объединение массива $a и массива $b
== $a == $b Равно
=== $a === $b Тождественно равно
!= $a != $b Не равно
<> $a <> $b Не равно
!== $a !== $b Тождественно не равно

Давайте на примере объединим два массива (что такое массив вы узнаете на следующих уроках).
Вот так будет выглядеть обычный массив:

Array ( [name] => Stepka ) Array ( [age] => 33 )

Теперь объединим массивы:

Array ( [name] => Stepka [age] => 33 )

Кстати, в коде вы, наверное, заметили функцию « print_r ».
Она часто помогает вывести удобочитаемую информацию о переменной.
На практике я часто пользуюсь этой функцией.

Бинарный парсинг с PHP

Дата публикации: 2012-11-19

От автора: бинарные операции в PHP – немного странные. Так как PHP с самого начала являлся шаблонным слоем для C-кода, в нем все еще много этих C-измов. Множество названий функции в точности отображают API C-уровня, даже если работают иногда немного по-разному. Например, PHP strlen напрямую устанавливают соответствие с STRLEN(3), и тому есть бесконечное множество примеров. Однако, как только дело доходит до работы с бинарными данными, все неожиданно сильно меняется.

Детали учебника

Тема: PHP

Сложность: продвинутая

Бинарные данные, говорите?


Что такое бинарные данные? Бинарный (двоичный) код на самом деле – всего лишь представление данных, а любые данные можно представить как нули и единицы. Говоря о бинарных данных, мы обычно подразумеваем представление данных, как последовательность битов. И обычно нам нужно закодировать некие данные для передачи в биты, а затем на другой стороне декодировать их. Бинарное представление – это просто эффективный формат передачи.

Чтобы кодировать и раскодировать, нам нужно как-то получить доступ к отдельным битам, а затем получить функции, способные конвертироваться из некоего существующего представления в упакованное и обратно. Один из способных к этому и обеспечиваемых языками программирования инструментов – побитовые операции.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Способ C

До того, как рассмотреть его работу в PHP, я хотел бы сначала изнутри рассмотреть, как C управляется с ним.

Хотя C является языком высокого уровня, он все еще очень близок к «железу». Внутри CPU и RAM данные хранятся, как последовательность битов. Следовательно, целые числа внутри C – тоже последовательность битов. Символ – тоже последовательность битов, а строка – массив символов.

Давайте рассмотрим пример:

мы обращаемся к первому символу H и печатаем два его представления. Первое – это представление символа (%c), второе – представление целого числа (%i). Представление символа – это H, представление целого числа – 72. Почему 72, спросите вы? Потому что десятичное число 72 представляет букву H в таблице ascii (Американского стандартного кода обмена информацией), что определяет набор знаков, который назначает каждому числу от 0 до 128 отдельное значение. Некоторые из них – управляющие символы, некоторые представляют числа, а некоторые – буквы.

Все в порядке. Данные – это просто данные, которые где-то хранятся, и нам нужно решить, как их интерпретировать.

PHP: как бы то ни было, вам не следует этого делать в PHP

Одна из основных причин, почему в PHP это так отличается – тот факт, что строка – это совсем иной тип. Давайте разберемся, что делает PHP:

Чтобы получить код ascii символа в PHP, вам нужно вызвать ord к символу (который на самом деле не символ, а строка из одного знака, так как здесь нет типа символа). Ord возвращает значение ascii символа.

В отличие от примера в C, здесь у нас имеется более одного представления данных. В C есть только единичное представление, у которого могут оказаться разные интерпретации. Число 72 в одно и то же время может быть символом H. PHP требует от нас конвертирования строк и значений ascii, сохраняя их оба в различных переменных с разными типами.

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

Опускаемся до уровня битов

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

В качестве примера я использую заголовок пакета DNS. Заголовок состоит из 12 байтов. Эти байты разделены на 6 полей по 2 байта в каждом. Вот формат, определенный RFC 1035:

Побитовые операторы (И) в PHP. Получение странных ответов

Поэтому я создаю этот скрипт, который должен получить целое число от оператора & из двух чисел в PHP. До сих пор мне удалось работать, но с небольшими номерами ( echo 65535 $ 2048; Я получаю результат 0, когда он должен быть 2048. Любые идеи, почему я получаю этот результат или как я могу получить желаемый результат?. Спасибо заранее, я использую PHP 5.5 и Ubuntu.

$ не является and оператором, & is.

Если вы пытаетесь:

вы должны получить 2048 штраф, как я только что сделал на http://sandbox.onlinephpfunctions.com/.

Когда вы пытаетесь запустить это:

Вы получите эту ошибку:

Для моего кода случая:

Выход 2048

Примечание. У вас есть опечатка, где должно быть & inplace of $. потому что $ is not и operator, но & is.

PHP: Операторы

Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

Оператор — это описание некоторого действия, которое интерпретатор должен сделать с указанными переменными. Операторы входят в большинство выражений и позволяют изменять или сравнивать значения переменных. Переменные, с которыми связан оператор, называются операндами. В предыдущем уроке мы уже использовали 3 оператора: присвоения «=», сравнения «>» и конкатенации (объединения) строк «.»;

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

Важное свойство операторов — приоритет (иначе называется «старшинство» или «вес»). Это свойство определяет в какой последовательности будут выполняться фрагменты одного выражения. В предыдущем уроке мы немного коснулись этой темы, когда рассматривали вложенность выражений.

Второе важное свойство — ассоциативность. Свойство определяет в каком направлении вычисляются пременные, к которым применяется оператор. Оператор может быть «ассоциативным слева», «ассоциативным справа» или не ассоциативным. Левая ассоциативность означает что значения операндов вычисляются слева направо, а правая ассоциативность — наоборот. Пример «левого» оператора — сложение, пример правого — присвоение.

В таблице перечислены операторы в порядке убывания приоритета. Операторы, стоящие на одной строке, вычисляются с учётом ассоциативности.

— (int) (float) (string) (array) (object) @

Ассоциативность Операторы
нет new
левая [
нет ++ —
нет
нет instanceof
правая !
левая * / %
левая + — .
левая >
нет >=
нет == != === !==
левая &
левая ^
левая |
левая &&
левая ||
левая ? : (тернарный оператор)
правая = += -= *= /= .= %= &= |= ^= >=
левая and
левая xor
левая or
левая ,

В строке «$assoc = 3 * 3 % 5;» используется сразу 3 оператора: присвоение «=», умножение «*» и деление по модулю «%». Из таблицы видно, первый оператор в выражении (считается слева-направо) — присвоение. Это «правый» и наименее приоритетный оператор , значит в первую очередь надо вычислить правый операнд («3 * 3 % 5»). Правый операнд — выражение с двумя «левые» операторами равного приоритета. Поэтому вычисление производится просто последовательно слева направо. Результат вычисления правого операнда становится операндом оператора присоения. Результат выполнения всех операций — переменная $assoc получает значение 4.

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

Все операторы разделяются на 11 групп:

  • Арифметические
  • Присвоения
  • Битовые
  • Сравнения
  • Контроля ошибок
  • Выполнения
  • Инкремента/декремента
  • Логические
  • Строковые
  • Операторы массивов
  • Операторы типов

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

Название Пример Результат
Отрицание -$a Значение с противоположным знаком
Сложение $a + $b Сумма двух операндов
Вычитание $a — $b Разность двух операндов
Умножение $a * $b Произведение двух чисел
Деление $a / $b Частное двух чисел
Деление по модулю $a % $b Остаток от целочисленного деления

В следующих уроках мы неоднократно будет использовать оператор %, поэтому остановлюсь на нём подробнее. Результат деления по модулю — это минимальная разница между исходным значением и значения, равного делителю, умноженному на целую часть обычного частного. Например, 12 % 5 = 2, т.к. 12 % 5 = 12 — (5 * [12/5]) = 12 — (5 * [2.4]) = 12 — (5*2) = 12 — 10 = 2.

На практике деление $a по модулю $b вручную делается так:

  1. Делим $a на $b, получаем $c
  2. Если $c равно нулю, значит $a % $b = 0
  3. Если $c не равно нулю, откидываем от $c дробную часть, получаем $d
  4. Умножаем $b на $d и полученное значение вычитаем из $a
  5. Результат вычитания — это и есть результат деления $a по модулю $b


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

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

Логика работы составного оператора проста: модифицирующий оператор применяется к операндам, после чего результат присваивается левому операнду. Например:

Битовые операторы

Битовые операции предназначены для изменения значений отдельных битов переменных. Эти операторы работают по тем же принципам, что и обычные логические операторы, только результат — значение бита (0 или 1), а не TRUE или FALSE.

$a

Название Пример Результат
AND (И) $a & $b Устанавливаются в «1» только биты, одновременно установленные в «1» в обоих операндах
OR (ИЛИ) $a | $b Устанавливаются в «1» биты, установленные в «1» хотя бы в одном операнде
XOP (ИЛИ-НЕ) $a ^ $b Устанавливаются в «1» биты, установленные в «1» в одном операнде, но не обоих сразу
NOT (Отрицание) Устанавливаются в «1» биты, ранее имевшие значение «0» и наоборот.
Сдвиг влево $a > $b Биты сдвигаются вправо на $b бит, «освобождённые» биты заполняются нулями

Стоит взять на заметку, что сдвиг влево на 1 бит равносилен умножению числа на 2, а сдвиг на 1 бит вправо — равносилен целочисленному делению на 2. Если ваш скрипт делает очень много умножений/вычитаний на числа, являющиеся степенями двойки, то производительность можно существенно повысить, заменив деление/умножение на битовый сдвиг.

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

PHP может сравнивать переменных двумя способами: сравнением по значению и сравнением по значению и типу.

Название Пример Результат
Равено $a == $b TRUE если $a равно $b
Идентично $a === $b TRUE если $a равно $b и тип данных $a равен типу данных $b
Не равно $a != $b или $a <> $b TRUE если $a не равно $b
Не идентично $a !== $b TRUE если $a не равно $b и/или тип данных $a не равен типу данных $b
Меньше $a $b TRUE если $a больше $b
Меньше или равно $a = $b TRUE если $a больше или равно $b

При использовании операций сравнения следует помнить, что PHP неявно делает преобразование типов. Например, если сравнивается числовое значение со строкой, то строка конвертируется в число, а если сравниваются две строки, состоящие только из цифр — они обе конвертируются в числа и сравниваются в числовом виде.

Ещё один оператор сравнения — тернарный оператор «? :». Смысл его в том, что возвращается одно из значений в зависимости от условия. В общем виде тернарный оператор записывается так:

[lvalue] = (условие)? выражение, если условие истинно : выражение, если условие ложно ;

Если $b больше 100 — выведется «Больше сотни», а если меньше — ‘Меньше или равно 100’;

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

При выполнении скрипта все ошибки, предупреждения и замечания выводятся на экран. Отключить эту опцию можно, изменив INI-файл PHP, либо вызвав специальную функцию. Но эти изменения затронут сразу все скрипты на сервере. Для отключения вывода ошибок в одном выражении используется оператор контроля ошибок «@» (собака).

В нижеследующем примере, если файл ‘counter.dat’ отсутствует, то выполнение первой строки приведёт к выводу предупреждения, а вторая — нет.

Оператор подавления ошибок очень полезен при вызове функций, которые могут выдать ошибку независимо от стараний программиста. Пример такой функции — imagecreatefromjpeg(). Это функция открывает файлы формата jpeg, но если файлы приходят от пользователей, то могут быть и «битыми», а на таких файлах imagecreatefromjpeg() выдаёт ошибку.

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

Оператор выполнения ««» (обратные кавычки) позволяет выполнять команды операционной системы и получать результат их выполнения. Однако у большинства провайдеров этот оператор отключен и его использование не даст никакого результата — возвращаемые данные будут всегда пусты.

При запуске на ОС Windows этот скрипт выведет результаты работы утилиты ipconfig. Однако если PHP работает в безопасном режиме — скрипт не выведет ничего.

Операторы инкремента и декремента

Операторы инкремента «++» и декремента «—» применяются для изменения значения переменной на «1».

Название Пример Результат
Пре-инкремент ++$a значение сначала увеличивается на «1», потом используется в выражении
Пост-инкремент $a++ значение сначала используется в выражении, а потом увеличивается на «1»
Пре-декремент —$a значение сначала уменьшается на «1», потом используется в выражении
Пост-декремент $a— значение сначала используется в выражении, а потом уменьшается на «1»

Сравните эти два примера и разница между пост- и пре- операторами будет очевидной:

Интересно, что операция инкремента применима не только к числовым, но и к строковым переменным, а вот инкремент и декремент логических переменных никакого эффекта не даст.

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

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

Название Пример Результат
AND (И) $a && $b или $a and $b TRUE если оба операнда TRUE
OR (ИЛИ) $a || $b или $a or $b TRUE, если хотя бы один оператор TRUE
XOP (ИЛИ-НЕ) $a xor $b TRUE, когда только один из операторов TRUE
NOT (Отрицание) !$a TRUE, когда операнд FALSE

На заметку: операция присвоения даёт TRUE если присвоение прошло успешно и присвоенное значение не равно FALSE. Поэтому следующий код выполняется без ошибок, но выполняется некорректно:

Скрипт всегда будет выводить ‘второе значение’ при любом значении $b, т.к. выражение «$b = 200» всегда истинно. Это очень распространённая ошибка, которую достаточно сложно отловить и исправить. Поэтому при написании кода надо быть внимательным и аккуратным.

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

Единственный строковый оператор — оператор конкатенации «.» (точка). Мы уже сталкивались с этим оператором ранее. Здесь лишь дополнительно отметим, что оператор «.» достаточно интеллектуален и сам корректно производит большинство приведений типов. Это очень удобно, т.к. можно запросто одним выражением «склеить» несколько переменных разного типа.

Операторы массивов

Название Пример Результат
Объединение $a + $b или $a and $b Объединение двух массивов
Эквивалентность $a == $b или $a or $b TRUE, если массивы имеют одинаковый набор пар «ключ/значение»
Идентичность $a === $b TRUE, если массивы имеют одинаковый набор пар «ключ/значение», в одинаковом порядке и одинакого типа
Неэквивалентность $a != $b или $a <> $b TRUE, если массивы имеют различный набор пар «ключ/значение»
Неидентичность $a !== $b TRUE, если массивы имеют различный набор пар «ключ/значение», в одинаковом порядке и одинакого типа

Оператор объединения «+» добавляет элементы правого операнда к списку элементов левого операнда. При этом совпадающие пары «ключ/значение» не перезаписываются, а пропускаются.

Подробно мы рассмотрим операторы работы с массивами в соответствущей главе.

Оператор проверки типа

Единственный оператор проверки типа «instanceof» позволяет проверить, является ли данная переменная экземпляром того или иного класса.

При рассмотрении классов мы рассмотрим эту инструкцию более подробно.

Список вопросов и задач при собеседовании PHP программиста

Готовясь к прохождению собеседования, PHP программисты часто задаются вопросами: что меня будут спрашивать, какие вопросы и задания могут быть? Вопросы и задачи могут быть абсолютно разными. Здесь нельзя предугадать, что конкретно у вас будут спрашивать, и какое тестовое задание попросят пройти.

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

Основное


Что такое PHP?

PHP — это скриптовый язык программирования для создания сайтов и веб-приложений. PHP унаследовал синтаксис языков программирования C, Perl, Java.

Какие знаешь версии PHP?

Есть следующие версии PHP:

  • PHP 2, PHP 3, PHP 4 старые и не поддерживаемые версии
  • PHP 5 >= используется в большинстве проектов, преимущественно обладает версия 5.6
  • PHP 7 актуальная версия с новыми возможностями и улучшениями

Синтаксис PHP

Что такое short tags и как его использовать в PHP?

Для обработки скрипта все содержимое кода необходимо заключать в открывающие и закрывающие теги и ?> , которые определяют начало и конец обработки. short tags — это короткий синтаксис позволяющий использовать echo использовать = (ровно) Например:

Как изолировать PHP код от HTML? Для чего это нужно?

Изолирование кода необходимо для использования смешанного содержимого скрипта: php, javascript, css и т.п. Изолирование обеспечивает удобство и простоту понимания содержимого скрипта.

Как использовать комментарии в коде PHP?

Комментарии позволяют документировать участки кода в PHP скрипте. Содержимое комментариев не отображается при выполнении скрипта. PHP поддерживает комментарии в следующих стилях:

Однострочные комментарии записываются до конца строки или текущего блока PHP-кода после символов // или # Многострочные комментарии запитываются внутри символов /* и */ Например:

Что такое $this и self в PHP?

$this — является ссылкой на текущий объект. self — является ссылкой на текущий класс.

В чем разница между одинарными и двойными кавычками в PHP?

В отличии от одинарных, данные в двойных кавычках парсятся.Например, при использовании двойных кавычек результат выведет Hello, а одинарные кавычки выведут переменную как текст, а не ее значение:

Типы данных PHP

Сколько в PHP типов данных? Какие это типы данных?

В PHP есть 8 базовых типов данных

4 скалярных типа:

  • boolean — логический тип true/false
  • integer — целочисленный тип
  • float — числовой тип с плавающей точкой, содержащий целые и дробные числа
  • string — строковый тип

2 составных типа:

  • array — массив с упорядоченным списком элементов
  • object — объект

2 специальных типа:

  • resource — ссылка на внешний (абстрактный) ресурс.
  • NULL — пустой тип, без значения

Какой тип типизации данных в PHP?

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

Что такое переменная и как ее использовать?

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

Что такое область видимости переменной?

Область видимости переменной, это место в котором переменная определена. Например, внутри функции или за ее пределом.

Что такое переменные извне?

Переменные извне — это данные полученные из формы с помощью GET и POST, данные полученные из COOKIE.

В чем разница между GET и POST?

GET передает данных из адресной строки в виде строки с параметрами. POST передает данные используя HTTP тело запроса (например, обычно через html форму). GET может передавать только данные объемом 1024 символов. POST может отправлять данные большого размера, который обычно установлен в настройках сервера.

Константы

Что такое константы? Как их использовать?

Константы — это уникальное имя, которое содержит какие-то данные. Константы можно использовать двумя способами:

Что такое волшебные константы?

Волшебные константы — это список предопределенных в PHP констант. Существуют следующие волшебные константы

Текущий номер строки в файле.


Полный путь и имя текущего файла с развернутыми симлинками. Внутри подключаемого файла возвращается имя данного файла.

Директория файла. Внутри подключаемого файла возвращается директория этого файла.

Имя функции или в случае анонимной функции.

Имя класса, содержит название пространства имен, в котором класс был объявлен (например, Block\Aside).

Имя трейта, содержит название пространства имен, в котором трейт был объявлен (например, Block\Aside).

Имя метода класса.

Имя текущего пространства имен.

Полное имя класса (с указанием пространства имен).

Операторы PHP

Что такое оператор?

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

Какие существуют операторы?

В PHP есть следующие виды операторов:

  • оператор присваивания
  • арифметические операторы
  • логические операторы
  • побитовые операторы
  • операторы сравнения
  • оператор управления ошибками
  • операторы инкремента и декремента
  • строковые операторы
  • операторы массивов
  • оператор проверки типа

Что такое арифметические операторы?

Арифметические операторы это простейшие математические операции: идентичность, отрицание, сложение, вычитание, умножение, деление, деление по модулю, возведение в степень.

Что такое логические операторы?

Логические операторы используются для проверки истинности или ложности каких-либо действий или условий. Есть следующие логические операторы:

Что такое оператор присваивания?

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

Что такое побитовые операторы?

Побитовые операторы это операции производимые над цепочкой битов.

Что такое операторы сравнения?

Операторы сравнения используются для сравнения значений переменных между собой.Существуют следующие операторы сравнения:

Тождественно не равно

Больше или равно

Космический корабль (spaceship)

Что такое оператор управления ошибками?

Оператор управления ошибками обозначается знаком @ и позволяет игнорировать вывод ошибок для используемых функций.

Что такое операторы исполнения?

Оператор исполнения позволяет выполнить строку, заключенную в кавычки « и возвращает полученный вывод. Например:

Что такое операторы инкремента и декремента?

Операторы инкремента и декремента позволяют увеличить и уменьшить значение переменной на 1 (единицу). PHP поддерживает префиксные и постфиксные операторы инкремента и декремента в стиле C.Например:

Увеличивает $a на единицу, затем возвращает значение $a.

Возвращает значение $a, затем увеличивает $a на единицу.

Уменьшает $a на единицу, затем возвращает значение $a.

Возвращает значение $a, затем уменьшает $a на единицу.

Что работает быстрей: преинкремент или постинкремент?

Преинкремент работает быстрее, изменяя содержимое самой переменной, в то время как постинкремент создает временную переменную.

Что такое строковые операторы?

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

Что делает оператор проверки типа?

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

Управляющие конструкции

Обязательно ли использовать закрывающий тег ?> в конце файла?


Нет, не обязательно. В файлах, где только PHP код, его лучше не использовать, чтобы предотвратить случайное попадание конечного пробела в вывод.

В чем разница между require(), require_once(), include(), include_once()?

  • require() просто подключает в текущий файл указанный
  • require_once() подлключает указанный файл в текущий только в том случает, если он не был ранее подключен
  • include() работает также как и require(), подключает файл и в случае ошибки возвращает WARNING, в то время как require() возвращает FATAL ERROR
  • include_once() работает также как и require_once(), подключает файл если он не был ранее подключен и возвращает WARNING, в то время как require_once() возвращает FATAL ERROR.

В чем отличие цикла while от do while?

Тело цикла do-while выполнится хотя бы один раз, так как условие проверяется в конце цикла, в то время как в цикле while условие проходит проверку вначале.

Что такое goto и как он работает?

Оператор goto обеспечивает переход из одной части программы в другую. Место в которое производится переход указывается с помощью специальной метки с двоеточием. Для перехода к этому месту используют оператор goto и название метки.

В чем различия между операторами break и continue?

Оператор break прерывает выполнение инструкций for, foreach, while, do-while или switch, а опратор continue пропускает часть итерации внутри цикла.

Как прервать выполнение for, foreach, while, do-while или switch?

Прервать выполнение инструкций for, foreach, while, do-while или switch возможно с помощью оператора break .

Как пропустить часть интерации цикла внутри for, foreach, while, do-while или switch?

Пропустить часть интерации цикла внутри for, foreach, while, do-while или switch возможно с помощью оператора continue .

Что такое declare?

Оператор declare производит установку директив исполнения для блока кода.

Почему в declare нельзя использовать переменные и константы?

В declare нельзя использовать переменные и константы, потому что директивы обрабатываются во время компиляции файла и только символьные данные могут использоваться в значении declare.

Что такое альтернативный синтаксис?

Альтернативный синтаксис используется для операторов if, while, for, foreach и switch и позволяет изменить запись выражения, использовав вместо открывающей фигурной скобки двоеточие (:), а вместо закрывающей скобки endif;, endwhile;, endfor;, endforeach; или endswitch;

Строки

Есть ли разница между одинарными и двойными кавычками?

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

В чем различия между echo и print?

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

Дана строка «Hello world!». Как перевернуть строку?

Чтобы перевернуть строку, можно использовать функцию strrev()

Массивы

Как удалить переменную или элемент из массива?

Для удаления переменной или элемента из массива надо использовать функцию unset(). Например:

Дан массив [1,2,3,4,5,6,7]. Как перевернуть его и получить [7,6,5,4,3,2,1]?

Чтобы перевернуть массив, можно использовать функцию array_reverse()

Как получить максимальное значение элемента массива [1,2,3,4,5,10,20,30,40,50,70,100, 10, 30, 50]?

Для получения максимального значения массива можно использовать функцию max() .

Либо сделать это через цикл:

Функции

Что такое функция?

Функция — это набор операторов, выполняющих определенные действия. Функция начинается с ключевого слова function , за которым следует имя функции, а за ней круглые скобки с передаваемыми параметрами внутрь функции.

Что такое аргументы функции?

Аргументы функции это данные, передаваемые внутрь функции в виде списка параметров. Аргументы разделяются запятыми и вычисляются слева на право.

Какие существуют способы передачи аргументов в функцию?

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

Как просиходит передача аргументов в функцию по значению?

Передача аргументов в функцию по ссылке происходит с помощью указания новых аргументов внутри вызываемой функции.

Как происходит передача аргументов в функцию по ссылке?

Передача аргументов в функцию по ссылке происходит с помощью указания амперсанда ( & ) перед именем аргумента в описании функции.


Как для функции просиходит установка значений по умолчанию?

Установка значений по умолчанию для функции просиходит с помощью указания значений для аргументов функции.

Какой оператор производит возврат результата функции?

Возрат результата функции производится с помощью оператора return .

Как происходит обращение к функциям через переменные?

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

Что такое ананимные функции?

Анонимная функция, или по другому, замыкания (closures), представляет собой функцию не имеющую имени и используемую для значений callback-параметров.

Что такое static функция?

Static функция вызывается напрямую у класса и позволяет обращаться к свойствам и методам класса без создания экземпляра класса. При этом указатель $this не доступен внутри метода объявленного статическим.

Что такое рекурсия?

Рекурсия — это вызов функции из самой себя.

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

Что такое объектно-ориентированное программирование?

Объектно-ориентированное программирование — это парадигма программирования с использованием объектов и классов.

Что такое MVC?

MVC (Model-View-Controller) схема шаблона проектирования, разделенный на три компонента для работы с базой данных, интерфейсом отображения данных, взаимосвязью приложения с пользователем. Модель отвечает за работу с информацией из базы данных. Представление отвечает за отображение полученной информации на экран. Контроллер отвечает за взаимодействие между данными и отображением.

Что такое конструктор?

Конструктор это метод _constructor(), который вызывается при создании экземпляра класса с помощью ключевого слова new.

Как в PHP сделать множественное наследование?

В PHP нельзя сделать множественное наследование. У класса может быть только один родитель. Для эмуляции множественного наследования можно использовать функцию _call() или трейты (traits). Трейт позволяет группировать и повторно использовать наборы методов в нескольких классах.

Назовите основные концепции объектно-ориентированного программирования

Основными концепциями объектно-ориентированного программирования являются: инкапсуляция, наследование, полиморфизм. Инкапсуляция объединяет методы и данные и защищает от внешнего вмешательства или неправильного использования. Наследование позволяет одному объекту наследовать методы и свойства другого объекта. Полиморфизм создает общий интерфейс для схожих по смыслу действий, чтобы решать множество разных задач.

Что такое виртуальный метод?

Виртуальный метод является переопределенным методом класса в классах-наследниках для вызова во время исполнения.

Что такое класс?

Класс это модель еще не существующего объекта, описывающая устройство бъекта — его методы и свойства.

Что такое объект?

Объект это данные и методы для их обработки.

Что такое члены класса?

Членами класса называют данные и методы объекта.

В чем отличие класса от объекта?

Объект является экземпляром типа класса. Класс является типом данных.

Что такое область видимости переменной?

Область видимости переменной — это область, в пределах которой метод или переменная продолжает работать и возвращать значение.

Есть несколько типов определяемых область видимости методов и переменных:

  • public — переменная доступна из любого места
  • protected — защищенная переменная доступна только внутри класса, в котором была объявлена и из производных классов
  • private — закрытые методы и переменные доступны только внутри класса

В чем отличие локальной переменной от глобальной переменной?

Локальные переменные доступны только в конкретном методе, а глобальные во всей программе.

Что такое абстрактный класс?

Абстрактный класс в объектно-ориентированном программировании — это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы и свойства.

В чем разница между абстрактным классом и интерфейсом?

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

Зачем интерфейс, когда есть абстрактный класс?

Произвести наследование можно только от одного абстрактного класса, но реализовать множество интерфейсов. Абстрактный класс наследуется, а интерфейс реализуется.


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

Что такое пространства имен?

Пространства имен — это объединение элементов (классов) с уникальными названиями в одну группу и их защита от внешнего вмешательства (инкапсулирование) внутри единого пространства с указанным именем.

Какие проблемы решает пространство имен?

Пространство имен решает проблемы конфликта имен классов, функций, констант и длинных имен различных библиотеки и модулей.

Как объявляются пространства имен?

Пространства имен объявляются с помощью ключевого слова namespace .

Как получить название пространства имен?

Получить название пространства имен можно с помощью магической константы __NAMESPACE__ .

Что такое use?

Ключевое слово use позволяет импортировать файл или каталог.

Что такое псевдоним имени?

Псевдоним имени — это указание короткого имени для импортируемого пути к файлу или каталогу.

Исключения

Что такое исключения?

Исключения позволяют сделать обработку ошибок в PHP: сгенерировать или поймать.

Генераторы

Что такое генераторы?

Генератор — это простая функция обозначаемая как yield (похожа на простые итераторы) и вместо возращения значения, как это делает return , будет перебирать все значения.

Что такое yield?

Ключевое слово yield используется при создании генератора для перебора значений и вместо возращения значения, как это делает return , перебирает все значения.

Ссылки

Что такое ссылка?

Ссылка — это доступ к переменной под разными именами.

Что делают ссылки?

Ссылки обеспечивают выполнение следующих операций: присвоение по ссылке, передачу по ссылке и возврат по ссылке.

Что не делают ссылки?

Ссылки не являются указателями на данные.

Cookie

Что такое Cookie и зачем они используются?

Cookie (Печеньки) — это небольшой фрагмент информации передаваемый в браузер и хранящийся на компьютере пользователя. Cookie используется для хранения необольшой информации, а также используется при аутентификации пользователей сайта, установки различных настроек и ведении статистики о сайте.

Что нельзя хранить в Cookie и почему?

В cookie ни в коем случае нельзя хранить конфендициальные данные, например: пароли, номера карт, а также делать проверку подленности пользователя к аккаунтам Это связано с тем, что содержимое cookie может быть легко просмотрено и изменено через браузер любым пользователем.

Какие есть типы cookie?

Есть следующие типы cookie: сессионные, постоянные, защищенные, HTTP-only. Сессионные (временные) — существуют только когда пользователь зашел на сайт, а при закрытии браузера уничтожаются. Постоянные — существуют все время и удаляются только в установленную дату или промежуток времени. Защищенные — куки могут быть переданы только через шифрованное HTTPS соединение. HTTP-only — к кукам нельзя обращаться из браузера через JavaScript, что устраняет их кражу через кросс-сайтового скриптинга (XSS).

Сессии

Что такое сессии и зачем они используются?

Сессии — это специальные файлы на сервере для хранения и доступа различных данных. Сессии позволяют хранить данные, к которым через браузер пользователь не может получить доступ, например, как в cookie. Посетителю сайта присваивается уникальный id (идентификатор сессии), который хранится в cookie на стороне пользователя или передается через адресную строку.

Вопросы MySQL

Где и как нужно хранить пароли пользователей сайта?

Пароли пользователей сайта необходимо хранить в базе данных в защищенном виде хэшировав их с помощью: sha1(), crypt(), password_hash().

Как получить одинаковые значения в поле MySQL?

Есть таблица product . Необходимо получить все одинаковые значения из поля vendor .

PHP: Побитовые операторы PHP

% (получение остатка от деления)

++ (инкремент/ увеличение значения на единицу)


Важно понимать разницу между выражениями ++$a и $a++ . Например:

Здесь сначала к значению переменной $a прибавляется единица, а затем ее значение приравнивается переменной $b. Иначе было бы, если бы выражение выглядело так: $b=$a++; . Здесь сначала значение переменной $a приравнивалось переменной $b, а затем происходило увеличение значения переменной $a.

— (декремент/ уменьшение значения на единицу)

Например, —$a . И также, как и в случае с инкрементом, существуют два вида записи: —$a и $a—

Операции присваивания

Приравнивает переменной определенное значение: $a = 5

Сложение с последующим присвоением результата. Например:

Вычитание с последующим присвоением результата. Например:

Умножение с последующим присвоением результата:

Деление с последующим присвоением результата:

Объединение строк с присвоением результата. Применяется к двум строкам. Если же переменные хранят не строки, а, к примеру, числа, то их значения преобразуются в строки и затем проводится операция:

Получение остатка от деления с последующим присвоением результата:

Операции сравнения

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

Оператор равенства сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a == 5

Оператор тождественности также сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a === 5

Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a != 5

Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a !== 5

Сравнивает два значения, и если первое больше второго, то возвращает true, иначе возвращает false: $a > 5

Сравнивает два значения, и если первое больше или равно второму, то возвращает true, иначе возвращает false: $a >= 5

Оператор равенства и тождественности

Оба оператора сравнивают два выражения и возвращают true, если выражения равны. Но между ними есть различия. Если в операции равенства принимают два значения разных типов, то они приводятся к одному — тому, который интерпретатор найдет оптимальным. Например:

Очевидно, что переменные хранят разные значения разных типов. Но при сравнении они будут приводится к одному типу — числовому. И переменная $a будет приведена к числу 22. И в итоге обе переменных окажутся равны.

Или, например, следующие переменные также будут равны:

Чтобы избежать подобных ситуаций используется операция эквивалентности, которая учитывает не только значение, но и тип переменной:

Теперь переменные будут не равны.

Аналогично работают операторы неравенства != и !== .

Логические операции

Логические операции обычно применяются для объединения результатов двух операций сравнения. Например, нам надо выполнить определенное действие, если истинны будут несколько условий. Имеются следующие логические операции:

Возвращает true, если обе операции сравнения возвращают true, иначе возвращает false: $a == 5 && $b = 6

Аналогично операции && : $a == 5 and $b > 6

Возвращает true, если хотя бы одна операция сравнения возвращают true, иначе возвращает false: $a == 5 || $b = 6

Аналогично операции || : $a 6

Возвращает true, если операция сравнения возвращает false: !($a >= 5)

Возвращает true, если только одно из значений равно true. Если оба равны true или ни одно из них не равно true, возвращает false. Например:

Здесь результат логической операции будет false , так как обе переменных имеют определенное значение. Изменим код:

Здесь уже результат будет true , так как значение одной переменной не установлено. Если переменная имеет значение NULL, то в логических операциях ее значение будет рассматриваться как false

Битовые операции

Битовые операции производятся над отдельными битами числа. Числа рассматриваются в двоичном представлении, например, 2 в двоичном представлении 010, число 7 — 111.

Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например:

Здесь число 4 в двоичной системе равно 100, а число 5 равно 101. Поразрядно умножим числа и получим (1*1, 0*0, 0 *1) = 100, то есть число 4 в десятичном формате.

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

инвертирует все разряды: если значение разряда равно 1, то оно становится равным нулю, и наоборот.

x>>y — сдвигает число x вправо на y разрядов. Например, 16>>1 сдвигает число 16 (которое в двоичном представлении 10000) на один разряд вправо, то есть в итоге получается 1000 или число 8 в десятичном представлении

Объединение строк

Для объединения строк используется оператор «точка». Например, соединим несколько строк:

Если переменные представляют не строки, а другие типы, например, числа, то их значения преобразуются в строки и затем также происходит операция объединения строк.

Мастер Йода рекомендует:  Выбор программы для создания анимации
Добавить комментарий