Здравствуйте уважаемые начинающие программисты. Продолжим изучение элементов, из которых состоит .

В этой статье мы узнаем, что такое операторы php. Вообще-то, с некоторыми из них мы знакомы чуть ли не с детства, только знаем их как знаки (+, -, =, !, ?).

В php все они называются операторами, что вполне логично, так как они выполняют определённое действие, или операцию.

Можно даже сказать, что все печатные знаки не являющиеся буквой или цифрой, в php являются операторами. Но и это ещё не всё, так как есть операторы состоящие из букв.

Давайте начнём по порядку.

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

Арифметические операторы применяются для выполнения действий с числами.

+ — оператор сложения;
— — оператор вычитания;
/ — оператор деления;
* — оператор умножения;
% — оператор получения остатка при делении;
++ — оператор увеличения на единицу (инкремент);
— — — оператор уменьшения на единицу (декремент)

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

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

echo (6 + 7 ) * (7 + 8 ); // 195
?>

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

echo 8 / 3 ; //2.66666666666
?>

Количество знаков, выводимых для дробного числа, зависит от установленного значения в директиве precision , находящейся в файле php.ini. Обычно это 12 символов не считая точки.

Оператор % обычно применяется для определения, делиться ли одно число на другое без остатка или нет.

echo 53328 % 4 ; //0
?>

Действия с арифметическими операторами, за исключением инкремента и декремента, называются бинарными , так как в них участвуют два операнда (слагаемое + слагаемое, делимое / делитель, и т. п.)

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

Операторы инкремента (++) и декремента (- -) применяются только к переменным.

Тип переменной integer (целые числа)

$next = 3 ;
echo ++$next; // 4
?>

Тип переменной string (строка)

$next = "abc";
echo $next; // abd
?>

Буква «d» выводится вместо буквы «с» потому, что она следующая по алфавиту, а мы увеличили значение переменной на единицу.

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

Поразрядные операторы

Поразрядные операторы предназначены для работы с двоичными данными. Если кто-то не представляет что это такое — объясню. Двоичные числа — это числа типа 1001000011100000111000.

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

& — поразрядное соединение И (and);
~ — поразрядное отрицание (not);
| — поразрядное объединение ИЛИ (or);
^ — поразрядное исключение ИЛИ (xor);
<< — сдвиг влево битового значения операнда;
>> — сдвиг вправо битового значения операнда;

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

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

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

> — оператор больше;
=> — оператор больше или равно;
< — оператор меньше;
<= — оператор меньше или равно;
== — оператор равенство;
!= — оператор неравенство;
=== — оператор эквивалентности (равны значение и тип переменной);
!== — оператор неэквивалентности;

В результате сравнения на экран выводится либо единица, что соответствует true (истина), либо пустая строка, что соответствует false (ложь).

echo 1 > 0 ; // 1
echo 1 < 0 ; // пустая строка
echo 1 => 0 ; // 1
echo 1 == 1 ; // 1
?>

Вот так, сами по себе, операторы сравнения почти не применяются. Основное их предназначение — это работа в паре с оператором if .

Условные операторы if, else, elseif .

Условные операторы называются так потому, что предназначены для проверки некоего условия, в зависимости от которого выполняется то, или иное действие.

В качестве аргумента, оператор if принимает логическую переменную, или выражение. Если условие верно то выводится результат, если не верно — пустая строка.



if ($next < $nexT)
{
echo "Возможны осадки"; // Выводиться Возможны осадки
}
?>

$next = "Влажность воздуха 80%";
$nexT = "Влажность воздуха 90%";
if ($next > $nexT)
{
echo "Возможны осадки"; // Выводиться пустая строка
}
?>

Если в программе нужно задать два действия, одно из которых будет выполняться при истинном значении, а другое при ложном, то вместе с оператором if , применяется оператор else

$next = "Влажность воздуха 80%";
$nexT = "Влажность воздуха 90%";
if ($next > $nexT)
{
echo "Возможны осадки";
}
else
{
echo "Осадки не предвидятся";
}
?>

В этом случае выведется «Осадки не предвидятся», а если в выражении сменить знак «Больше» на «Меньше», то выведется «Возможны осадки». Вот так условные операторы проверяют условие, и выводят согласно ему верный результат.

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



if ($next > $nexT)
{
echo "Ясно";
}
elseif ($next <= $nexT)
{
echo "Снег";
}
elseif ($next >= $nexT)
{
echo "Дождь";
}
elseif ($next == $nexT)
{
echo "Засуха";
}
else
{
echo "Возможны осадки";
}
?>

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

Оператор if может содержать сколько угодно блоков elseif , и только один оператор else .

Допускается альтернативный вариант записи — без фигурных скобок. В таком случае строки операторов if, else, elseif , заканчиваются двоеточием, а вся конструкция — ключевым словом (оператором) endif .

$next = "Влажность воздуха 50%";
$nexT = "Влажность воздуха 60%";
if ($next <= $nexT):

echo "Снег";

elseif ($next >= $nexT):

echo "Дождь";

elseif ($next == $nexT):

echo "Засуха";

else:

echo "Возможны осадки";
endif ;
?>

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

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

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

&& — соединительный союз И;
and — тоже И, но с меньшим приоритетом;
|| — разделительный союз ИЛИ;
or — тоже ИЛИ, но с меньшим приоритетом;
xor — исключающее один элемент ИЛИ;
! — отрицание;

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

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

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

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

$next = "Здравствуйте"
echo "Здравствуйте" // Здравствуйте
?>

Оператор точка

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

$next = 22 ;
echo "Сегодня после" .$next. "ожидается заморозок"; // Сегодня после 22 ожидается заморозок
?>

Оператор круглые скобки

Как и в математике, оператор круглые скобки задаёт приоритет действию, в них заключённому.

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

Оператор фигурные скобки

В php существует три способа, или даже стиля, размещения фигурных скобок.

1. BSD стиль — скобки выравниваются по левому краю.

if ($next)
{

}

2. GNU стиль — скобки выравниваются с отступом от левого края

if ($next)
{
echo «Здравствуйте уважаемые начинающие программисты»;
}

3. K&R стиль — скобка открывается в строке оператора

if ($next){
echo «Здравствуйте уважаемые начинающие программисты»;
}

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

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

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

По аэропорту Шереметьево в слезах бродит ирландец. Один из служащих решил посочувствовать:
— По родине скучаете?
— Вовсе нет. Только что я потерял весь свой багаж
— Как же это могло случиться?
— Сам не пойму. Вроде как следует пробку затыкал

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

На вопрос, что такое операторные скобки, нам поможет ответить Wikipedia:

Операторные скобки - скобки или команды, определяющие в языке программирования блок команд, воспринимаемый как единое целое, как одна команда.

В языке Pascal для обозначения операторных скобок используется конструкция begin…. end . В Си-подобных языках (к коим относится и PHP ), операторные скобки описываются с помощью символов {…} .

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

В статье об условиях в PHP был пример:

$b) { echo "Переменная A больше, чем B"; } else { echo "Переменная B больше, чем A"; } ?>

В этом примере операторные скобки используются 2 раза. Они обрамляют операторы

  • echo “Переменная A больше, чем B”;
  • echo “Переменная B больше, чем A”;

В этом примере в скобки заключен всего 1 оператор, так что это равносильно вот такой записи:

$b) echo "Переменная A больше, чем B"; else echo "Переменная B больше, чем A"; ?>

Синтаксис :

If (условие) выражение 1; else выражение 2;

Допустим, мы хотим, чтобы в случае невыполнения условия на экран также выводилась еще одна строка. Также изменим значения наших переменных так, чтобы теперь $a была > $b . Модифицируем наш код:

$b) echo "Переменная A больше, чем B. "; else echo "Переменная B больше, чем A. "; echo "Да..да А на самом деле меньше B. "; ?>

Выполняем… Что же мы видим на экране:

Переменная A больше, чем B. Да..да А на самом деле меньше B.

Где-то здесь закралась ошибка. Как вы уже догадались все дело в том, что так как у нас условие истинно (а > b), то выполняется код:

Echo "Переменная A больше, чем B. ";

В ветке else у нас содержится только 1 выражение:

Echo "Переменная B больше, чем A. ";

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

$b) echo "Переменная A больше, чем B. "; else echo "Переменная B больше, чем A. "; echo "Да..да А на самом деле меньше B. "; ?>

Теперь используем операторные скобки и объединим 2 выражения в ветке else :

$b) { echo "Переменная A больше, чем B. "; } else { echo "Переменная B больше, чем A. "; echo "Да..да А на самом деле меньше B. "; } ?>

Код стал гораздо наглядней. Теперь PHP понимает, что в случае невыполнения условия ($a > $b) нужно вывести 2 строки. А если условие истинно – только одну.

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

  • код так лучше воспринимается. Окинув быстрым взглядом код, мы видим отдельные его блоки, а не винегрет из букв и цифр.
  • в старый код частенько приходиться вносить изменения. Если у вас не стояли операторные скобки, а вы (как в нашем случае) дописали какой-то код, то логика программы будет неверной. Вы можете даже сразу этого не заметить.

Переменная $GLOBALS . Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.

Для объявления глобальной переменной ее достаточно поместить в массив $GLOBALS

$GLOBALS["testkey2"]="testvalue2";

Вывести на экран все значения переменных массива $GLOBALS можно при помощи print_r($GLOBALS); или так:

Foreach ($GLOBALS as $key=>$value) echo "GLOBALS[".$key."] == ".$value."
";

Переменная $_SERVER .

    Переменная $_REQUEST - ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE. Переменные в массиве $_REQUEST передаются в скрипт посредством методов GET, POST или COOKIE, поэтому им нельзя доверять, т.к. они могли быть изменены удаленным пользователем. Их наличие и порядок добавления данных в соответствующие массивы определяется директивой variables_order (по умолчанию установлено GPCS).

    Переменная $_SESSION

    Переменная $_ENV . Заполняется если скрипт был запущен из командной строки. Массив $_SERVER будет содержать все переменные из массива $_ENV.

    Переменная $http_response_header

Простой синтаксис

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

$beer = "Heineken" ;
echo "$beer"s taste is great" ; // работает, """ это неверный символ для имени переменной
echo "He drank some $beers" ; // не работает, "s" это верный символ для имени переменной
echo "He drank some ${beer}s" ; // работает
echo "He drank some {$beer}s" ; // работает
?>

Точно также могут быть обработаны элемент массива (array ) или свойство объекта (object ). В индексах массива закрывающая квадратная скобка (] ) обозначает конец определения индекса. Для свойств объекта применяются те же правила, что и для простых переменных, хотя с ними невозможен трюк, как с переменными.

// Эти примеры специфически об использовании массивов внутри
// строк. Вне строк всегда заключайте строковые ключи вашего
// массива в кавычки и не используйте вне строк {скобки}.

// Давайте покажем все ошибки
error_reporting (E_ALL );

$fruits = array("strawberry" => "red" , "banana" => "yellow" );

// Работает, но заметьте, что вне кавычек строки это работает по-другому
echo "A banana is $fruits." ;

//Работает
echo "A banana is {$fruits["banana"]}." ;

// Работает, но PHP, как описано ниже, сначала ищет
// константу banana.
echo "A banana is {$fruits}." ;

// Не работает, используйте фигурные скобки. Это вызовет ошибку обработки.
echo "A banana is $fruits["banana"]." ;

// Работает
echo "A banana is " . $fruits [ "banana" ] . "." ;

// Работает
echo "This square is $square->width meters broad." ;

// Не работает. Для решения см. сложный синтаксис.
echo "This square is $square->width00 centimeters broad." ;
?>

Для более сложных задач вы можете использовать сложный синтаксис.

Сложный (фигурный) синтаксис

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

Фактически, вы можете включить любое значение, находящееся в пространстве имени в строке с этим синтаксисом. Вы просто записываете выражение таким же образом, как и вне строки, а затем заключаете его в { и }. Поскольку вы не можете экранировать "{", этот синтаксис будет распознаваться только когда $ следует непосредственно за {. (Используйте "{\$" или "\{$" чтобы отобразить "{$"). Несколько поясняющих примеров:

// Давайте покажем все ошибки
error_reporting (E_ALL );

$great = "fantastic" ;

// Не работает, выведет: This is { fantastic}
echo "This is { $great}" ;

// Работает, выведет: This is fantastic
echo "This is {$great}" ;
echo "This is ${great}" ;

// Работает
echo "Этот квадрат шириной {$square->width}00 сантиметров." ;

// Работает
echo "Это работает: {$arr}" ;

// Это неверно по той же причине, что и $foo неверно вне
// строки. Другими словами, это по-прежнему будет работать,
// но поскольку PHP сначала ищет константу foo, это вызовет
// ошибку уровня E_NOTICE (неопределенная константа).
echo "Это неправильно: {$arr}" ;

// Работает. При использовании многомерных массивов, внутри
// строк всегда используйте фигурные скобки
echo "Это работает: {$arr["foo"]}" ;

// Работает.
echo "Это работает: " . $arr [ "foo" ][ 3 ];

Echo "Вы даже можете записать {$obj->values->name}" ;

Echo "Это значение переменной по имени $name: {${$name}}" ;
?>

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

// Получение первого символа строки
$str = "Это тест." ;
$first = $str { 0 };

// Получение третьего символа строки
$third = $str { 2 };

// Получение последнего символа строки
$str = "Это все еще тест." ;
$last = $str { strlen ($str )- 1 };

// Изменение последнего символа строки
$str = "Посмотри на море" ;
$str { strlen ($str )- 1 } = "я" ;

?>

Строковые функции и операторы

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

В различных языках программирования используются различные операторы конкатенации (объединения) строк. Например, в Pascal используется оператор "+". Использование в PHP оператора "+" для конкатенации строк некорректно: если строки содержат числа, то вместо объединения строк будет выполнена операция сложения двух чисел.

В PHP есть два оператора, выполняющие конкатенацию.

Первый - оператор конкатенации ("."), который возвращает объединение левого и правого аргумента.

Второй - оператор присвоения с конкатенацией, который присоединяет правый аргумент к левому.

Приведем конкретный пример:

$a = "Hello " ;
$b = $a . "World!" ; // $b содержит строку "Hello World!" - Это конкатенация

$a = "Hello " ;
$a .= "World!" ; // $a содержит строку "Hello World!" - Это присвоение с конкатенацией
?>

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

Для сравнения строк не рекоммендуется использовать операторы сравнения == и!=, поскольку они требуют преобразования типов. Пример:

$ x = 0 ;
$ y = 1 ;
if ($ x == "" ) echo "

x - пустая строка

" ;
if ($ y == "" ) echo "

y - пустая строка

"
;
// Выводит:
// x - пустая строка
?>

Данный скрипт сообщает нам, что $x - пустая строка. Это связано с тем, что пустая строка ("") трактуется прежде всего как 0, а только затем - как "пусто". В PHP операнды сравниваются, как строки, только в том случае, если оба они - строки. В противном случае они сравниваются как числа. При этом любая строка, которую PHP не удается перевести в число (в том числе и пустая строка), будет восприниматься как 0.

Примеры сравнения строк:

$ x = "Строка" ;
$ y = "Строка" ;
$ z = "Строчка" ;
if ($ x == $ z ) echo "

Строка X равна строке Z

" ;
if ($ x == $ y ) echo "

Строка X равна строке Y

"
;
if ($ x != $ z ) echo "

Строка X НЕ равна строке Z

"
;
// Выводит:
// Строка X равна строке Y

?>

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

$ x = "Строка" ;
$ y = "Строка" ;
$ z = "Строчка" ;
if ($ x == = $ z ) echo "

Строка X равна строке Z

" ;
if ($ x === $ y ) echo "

Строка X равна строке Y

"
;
if ($ x !== $ z ) echo "

Строка X НЕ равна строке Z

"
;
// Выводит:
// Строка X равна строке Y
// Строка X НЕ равна строке Z
?>

Для интерполяции строк. Из руководства:

Сложный (фигурный) синтаксис

Это не называется сложным, потому что синтаксис является сложным, а потому он позволяет использовать сложные выражения.

Любая скалярная переменная, элемент массива или свойство объекта со строкой представление может быть включено через этот синтаксис. Просто напишите выражение так же, как оно было бы вне строки, и затем оберните его в { и } . Поскольку { не может быть экранирован, этот синтаксис будет распознаваться только тогда, когда $ следует за { . использование {\$ , чтобы получить литерал {$ . Некоторые примеры, чтобы дать понять:

width}00 centimeters broad."; // Works, quoted keys only work using the curly brace syntax echo "This works: {$arr["key"]}"; // Works echo "This works: {$arr}"; // This is wrong for the same reason as $foo is wrong outside a string. // In other words, it will still work, but only because PHP first looks for a // constant named foo; an error of level E_NOTICE (undefined constant) will be // thrown. echo "This is wrong: {$arr}"; // Works. When using multi-dimensional arrays, always use braces around arrays // when inside of strings echo "This works: {$arr["foo"]}"; // Works. echo "This works: " . $arr["foo"]; echo "This works too: {$obj->values->name}"; echo "This is the value of the var named $name: {${$name}}"; echo "This is the value of the var named by the return value of getName(): {${getName()}}"; echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}"; // Won"t work, outputs: This is the return value of getName(): {getName()} echo "This is the return value of getName(): {getName()}"; ?>

Часто этот синтаксис не нужен. Например, это:

$a = "abcd"; $out = "$a $a"; // "abcd abcd";

ведет себя точно так же, как это:

$out = "{$a} {$a}"; // same

Таким образом, фигурные скобки не нужны. Но это:

$out = "$aefgh";

будет, в зависимости от вашего уровня ошибки, либо не работать, либо создавать ошибку, потому что нет переменной с именем $aefgh , поэтому вам нужно сделать:

$out = "${a}efgh"; // or $out = "{$a}efgh";