Операторы, переменные в PHP
Переменная в PHP, как и во многих других языках обозначается знаком $
Имя начинается с буквы или _ подчеркивания.
В нее можно присвоить знаком = как текст, так и цифры и выполнить математические расчеты.
Переменная в php регИстроЗависимая. Имя переменной можно давать и кириллицей, но при работе с некоторыми операторами могут быть баги, поэтому лучше писать латиницей.
Вывести переменную в строке можно при помощи конкатенации. Объявим переменную.
$per = 'Я переменная'; echo 'если вы впишите переменную здесь в одиночных кавычках, $per. <p> То она выведется как текст. <p> Если при помощи конкатенации то как ' . $per;
Если кавычки одинарные, то php принимает все что внутри как текст. Если кавычки двойные, в этом случае php будет искать переменную, то есть тратить ресурс и время. Поэтому следует запомнить и ставить кавычки в зависимости от задачи.
Выводим в двойных кавычках.
echo "если переменную выводим в тексте с двойными кавычками $per , То она выведется как переменная";
Строки в переменных
Для того чтобы написать в тексте и в переменной двойные кавычки " их нужно записывать в одинарных кавычках или наоборот одинарные в двойных.
echo ' вот " так \" все \ отображается <p> ';
$kavichki = " вот \' так \тоже <p> ";
либо экранировать обратным слешом \ и для того чтобы отобразить обратный слеш \" его так же нужно экранировать \\\" . При экранировании \" в одинарных кавычках обратный слеш так же будет виден. Обратный слеш экранирует все знаки которые задействованы в php.
echo ' вот \' так \\\' экранируем <p> ';
$kavichki = " вот \" так \" тоже <p> ";
Ссылки на сайт в php
Для закрепления работы со строками в переменных и командах, разберем разные варианты создания ссылок.
Адрес ссылки записывается в кавычках, поэтому для простого указания ссылки в php, нужно записать адрес и отобразить, в разных кавычках. Пример
echo '<a href="http://socport.ru"> Ссылка на сайт '; // адрес URL в двойных кавычках
Запишем ссылку и название в переменную.
$silka = 'socport.ru'; // записали адрес
$text = ' Ссылка на сайт '; // записали название ссылки
Так в двойных кавычках мы можем вывести и переменные, и одинарные кавычки. Пример
echo "<a href='http://$silka'> $text "; // в одинарных URL
Ну и еще проще если у нас все будет в переменных, чтобы не повторялся текст если ссылки должны быть разными.
$port = '<a href="http://'; // открыли ссылку двойными кавычками
$silka = "socport.ru\">"; // закрыли адрес двойными кавычками
$text = ' Перейти на сайт '; // тест ссылки
echo "<p> $port$silka $text </a> <p>"; // отобразили ссылку на сайт
Теперь чтобы отобразить ссылку, меняем только переменную с адресом сайта и все.
Вы заметили что адрес сайта записан в двойных кавычках, а закрывающая ссылку двойная кавычка заэкранирована, это для примера. Можно просто было адрес взять в одинарные кавычки. Дальше заметили между переменными порт и силка нет пробела, иначе пробел будет в URL и ссылка не сработает, так же нет пробелов между кавычками в переменных с адресом, по той же причине.
Heredoc
Еще один способ записать любой текст в php при помощи heredoc-синтаксиса. Записывается он тремя знаками меньше и идентификатором. Правила имен идентификатора как и у переменных, а вот после имени не должно быть пробела, а сразу перенос строки.
echo <<<VOT
После как указали идентификатор, сразу идет перенос строки и текст без пробела. Идентификатор лучше записывать в верхнем регистре. В конце текста так же перенос строки и закрывающий тег идентификатора.
VOT;
$qw = <<<VOT
здесь текст любой " /''\ любые символы<p> переменные $kavichki переносы <br> и все такоеVOT;
Nowdoc — это то же самое для строк в одинарных кавычках, что и heredoc для строк в двойных кавычках. Идентификатор записывается в одинарных кавычках.
echo <<<'VOT' Текст выводится так же как в одинарных 'кавычках' VOT;
Если вы используете синтаксис в конце страницы, то после закрывающего тега должна быть пустая строка или закрывающий тег php.
Эта конструкция идеальна для внедрения PHP-кода или других больших блоков текста без необходимости его экранирования.
Арифметические операторы
Пример, переменой А добавляем 6, а в Б добавляем 3 и если мы сразу в ней пропишем название, то результат все равно будет, так как оператор если первой видит цифру то сразу начинает считать.
Пример:
$a = '6 Яблок';
$b = '3 Лимона';
$g = '5 Груш';
И считаем операторами результат.
Сложение $a + $b; = 9
Вычитание $a — $b; = 3
Умножение $a * $b; = 18
Деление $a / $b; = 2
Отрицание -7 — $a + $g; = -8
echo (5 — - 6); // = 11
echo (-5 — 6); // = -11
echo (5 — 6); = -1
Возведение в степень $a ** 2; = 36
Деление по модулю $a % 4; = 2
Тут всё просто. В нашем случае мы вычисляем остаток от деления a=6 на 4. Нацело не делится, целая часть – 1, и 2 в остатке.
$q = 5;
$p = $q % 3;
echo $p;
Вычислим четное или не четное.
Для этого проверяем остаток от деления на 2 будет равен 0. Пример.
$q = 5.6; if ($q % 2 == 0) { echo' Чётное'; } else{ echo' Нечётное'; }
При делении по модулю операнды преобразуются в целые числа (int) (путём удаления дробной части) до начала операции.
Вычислим модуль числа. Если число больше или равно нулю, то нужно вывести само это число, если меньше – заменить знак с минуса на плюс. Пример
$q = -5; if ($q >= 0) { echo'Модуль числа: ' . $q; } else { echo'Модуль числа: ' . -$q; }
Чтобы нам сразу вывести всю информацию из переменной и результат, запишем это таким образом. Так как мы передаем в строке, данные из переменной, то естественно пишем в " двойных кавычках " в одинарных мы выводим ' текст '
Так как вначале мы выводим переменную в двойных кавычках, то у нас выводиться вся информация из переменной. Дальше мы даем оператору туже переменную для вычисления, разделяя от текстового вложения запятой. Оператор находит в переменной цифры и делает расчет. В конце мы поставили HTML тег перенос строки тоже отделив от переменной запятой. Вычисления с переменными делаем вне текстового блока.
echo "Завезли 02.02.2020, $a и $b, всего фруктов: " , $a + $b + $g, '<p>';
И получаем ( Завезли 02.02.2020, 6 Яблок и 3 Лимона, всего фруктов: 14 )
В php-8 вызовет ошибку из за числа и слов в переменной
Улучшенное сравнение строк и чисел в php-8. Теперь при сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк.
К примеру нам привезли еще 10 яблок и нам нужно добавить количество, но с новой датой, а предыдущая запись чтобы осталась.
Сделаем это оператором присваивания.
Добавить имеющиеся фрукты в новую переменную или просто обновив ее данные, о собственно прибавим уже к имеющийся.
$a = $a + 10; или та же запись в сокращенном варианте записи $a += 10;
Или продали половину яблок $a /= 2;
В сокращенном варианте мы сначала делаем вычисления потом ставим знак ровно.
Однако в этом случае как вы видите в переменную А добавилось лишь число, а подпись яблок выводиться не будет. Как добавить наименование мы разберем чуть ниже и в уроках Пишем Вэб магазин.
Операторы имеют разный приоритет. Как, например, в математике: оператор умножения будет более приоритетным по сравнению с оператором сложения, если не установлен приоритет скобок.
$a + $b * 2; = 12 так как идет сначала умножение.
($a + $b) * 2; = 18 Так как сначала выполняем сложение в скобках.
Операторы сравнения
Результатом их работы всегда будет булево значение (true или false). знак = всегда идет последним.
Больше $a > $b; // True — Истина. Да А больше Б
Меньше $a < $b; // False — Ложь. Нет А не меньше Б
Ровно $a == $b; // False — Ложь
Не равно $a != $b; и не равно $a <> $b; // True — Истина
Больше или равно $a >= $b; // True — Истина так как А больше Б
Меньше или равно $a <= $b; // False — Ложь
Идентично равно и имеет тот же тип $a === $b; // False — Ложь так как тип тот же но не равно.
Не идентично, не равно или разный тип данных $a !== $b; = True — Истина так как А не равно Б
Spaceship
Спейшил оператор сравнения для сортировки, который появился в PHP7. Сравнение идет если левая сторона больше, равно или меньше правой то вывести.
$a <=> $b;
Если $a > $b; вернёт 1
Если $a == $b; вернёт 0
Если $a < $b; вернёт -1
Давайте рассмотрим пример:
Целые числа
echo 1 <=> 2; // -1
Floats
echo 2.5 <=> 1.5; // 1
Строки
echo «a» <=> «a»; // 0
Массивы
echo [1, 2, 4] <=> [1, 2, 3]; // 1
Объекты
$a = (object) [«a» => «b»];
$b = (object) [«a» => «c»];
echo $a <=> $b; // -1
сравниваются только значения
$a = (object) [«a» => «b»];
$b = (object) [«b» => «b»];
echo $a <=> $b; // 0
Инкремент и декремент
Увеличивать и уменьшать целые числа на единицу.
Для этого существуют специальные операторы инкремента и декремента.
Варианты могут быть самыми разными:
$i++ постфиксный инкремент, возвращает текущее значение $i, а затем увеличивает значение на единиц
$i-- постфиксный декремент, возвращает текущее значение $i, а затем уменьшает значение на единицу
++$i префиксный инкремент, сначала увеличивает значение переменной $i на единицу, а затем возвращает результат
--$i префиксный декремент, сначала уменьшает значение переменной $i на единицу, а затем возвращает результат
Давайте рассмотрим несколько простых примеров:
Если мы в переменную которую удалили или с типом NULL, увеличим при помощи оператора инкремент, то у нас получиться. Пример 1
$a = NULL;
$a++;
var_dump($a); // int(1)
Пример 2
$a = 10;$b = 5;
$a += $b++; // получим 15. Переменой а прибавили переменную b, а уже после увеличили на единицу.
var_dump($a);
$a += ++$b; // получим 22. Переменой а прибавили переменную b, увеличенной на единицу в предыдущим сложении и в этом, которая стала 7.
var_dump($a);
$a += $b--; // получим 29 сначала прибавили, а которая равна 22, b которая равна 7, а после b уменьшили на 1.
var_dump($a);
$c = $a + $b; // получаем 35 так как мы в переменную a=29, прибавили b=6 так в переменной с, к а прибавили b которая была уменьшенная на 1
var_dump($c);
Логические операторы
Логические операторы используются для вычисления условий. Результатом такого оператора всегда будет истина или ложь. При этом операндами так же выступают истина или ложь.
Давайте перечислим их:
&& , and — логическое И, и первый и второй операторы истина, тогда выполнит.
||, or — логическое ИЛИ, если хотя бы один из операторов истина, тогда выполнит.
! – ОТРИЦАНИЕ, возвращает true, если операнд – false, и наоборот. Применяется если нужно инвертировать условие, зачастую это очень кстати.
xor – исключающее ИЛИ, вернёт true, только если один из операндов true, а другой – false
$a= (6 == 6) || (4 <= 9); // true
Конкатенация, объединение.
Добавление в переменной еще одной переменной или текста и цифр, то есть их объединение в одно, оператором конкатенации используем точку . между объединяемыми переменными и точка со знаком ровно .= Забегая наперед уточню, для конкатенации строк и функций используем запятую , .
К примеру создадим переменную цитата, переменная имеет чувствительность к регистру и запишем в нее цитату.
$P_cit = 'Дебилы зарабатывают деньги. Разумные делают работу. ';
и выведем ее
echo $P_cit;
( Дебилы зарабатывают деньги. Разумные делают работу. )
Таким образом в любом месте мы сможем вывести любой текст указав лишь переменную.
Допустим мы задаем вопрос, чья цитата? И добавляем в цитату подпись, но не во всей переменной, а к переменной или в месте ответа. Добавляем с объединением через точку .
echo $P_cit . 'а Павел';
и получаем
( Дебилы зарабатывают деньги. Разумные делают работу. а Павел )
Таким же образом .= мы добавляем в переменную цифры.
$c = 5; $p = 10;
$c .= 7; или прибавляем к 10 $p += 3; Что мы выше уже делали/
А теперь как вы уже догадались мы можем таким образом добавить наименование яблок к нашей обновленной переменной через конкатенацию .=
Идем в наш код и добавляем после обновления переменой $a
добавляем конкатенацию $a .= ' Яблок'; и получаем если вы прибавляли и делили.
( Завезли 02.05.2020, 8 Яблок и 3 лимона, всего фруктов: 13)
Немножко геморойно, поэтому работа в PHP идет с файлами и базами данных. Но это лучше чем один HTML, так как здесь присутствует динамика.
Похожим способом можем присоединить переменные друг к другу, но без знака = просто точкой.
echo $c . $p ;
Получиться 5713.
Или уже с этими обновленными переменными работать. Пример:
echo $c + $p;
Выдаст нам 70, так как С стала 57, а Р стала 13.
Ссылки с конкатенацией
$silka = 'socport.ru'; // записали адрес $text = ' Ссылка на сайт '; // записали название ссылки echo '<a href="http://' . $silka . '">' . $text . '</a><p>'; // вывели
Так как мы выводим в одинарных кавычках, мы адрес берем в двойные кавычки и переменную записываем с конкатенацией. Поэтому весь текст и двойные кавычки берем в одинарные. Если же взять URL в одинарных кавычках, то записать ее гораздо проще. Так как в двойных кавычках мы можем вывести и переменные, и одинарные кавычки, что мы и делали выше. Здесь для примера конкатенации.
Выводим переменную в слове
Еще один вариант конкатенации фигурные скобки в которых мы выводом {переменные}. Пробелов между фигурными скобками внутри быть не должно . Записывается в «двойных кавычка „
echo "Завези {$a} <br> продали {$b}";
При такой конкатенации не нужны не точки, не кавычки.
Для того чтоб дописать к переменной буквы, к примеру изменить яблок на яблоки, выводим в фигурных скоб {$a}ках. Пример.
$a = '5 яблок'; // Главное чтобы в данных переменной и закрывающей кавычки не было пробела
$b = '3 лимона ';
echo "продали вместе с {$a}ами еще и $b";
(продали вместе с 5 яблоками еще и 3 лимона)
Копирование переменной
Для того чтобы скопировать переменную мы просто их оператором присваивания = к переменной слева присваиваем значение из правой переменной.
К примеру у нас есть переменная а с яблоками которые привозят в магазин, а мы хотим еще со своего сада продавать яблоки, просто копируем ее дав новое имя ya.
$ya = $a;
и теперь мы можем работать с ссылкой ya не трогая а. У меня есть еще 5 яблок с моего сада которые я добавляю к тем в магазине.
$ya += 5; echo " завезли $a, вместе с моими $ya яблок, и $b, всего фруктов " , $ya + $b ;
И получаем (завезли 5 яблок, вместе с моими 10 яблок, и 3 лимона, всего фруктов 13 )
Следует помнить что это всего лишь скопированная переменная, если мы уберем переменную а, то останется 5 наших яблок которые мы добавили к переменной ya своих. Работать можно с двумя переменными вместе и отдельно.
Ссылка на переменную
Ссылка на переменную создается знаком = &
$ya =& $a;
В этом случае если мы сделаем ссылку и прибавим свои 5 яблок, то они прибавятся и к количеству в магазине. Проверяем
echo " завезли $a, вместе с моими $ya яблок, и $b, всего фруктов " , $a + $b ;
Здесь получаем уже одинаковое число яблок, так как мы ссылаемся на $ya.
( завезли 10, вместе с моими 10 яблок, и 3 лимона, всего фруктов 13 )
И если мы увеличиваем количество в магазине они автоматически прибавляются и к нашим яблокам.
То есть таким образом мы создаем еще одно имя у переменной на которую ссылаемся и записывать можем, всего фруктов а + b , получим тот же результат что и выше с ya + b. Работаем с двумя именами переменной но одним результатом, однако есть одно но.
Ссылка на переменную которая не ссылка, а ссылка на данные в переменной.
Удалим переменную а, и видим что, удалилась переменная, а данные из нее остались в переменной $ya, которая ссылается на переменную а.
unset не удаляет переменную с данными, а удаляет только имя переменной. Если на эту запись с данными не будет, как в нашем случае другого имени переменной, то спустя время они удаляться из памяти.
unset ($a);
( завезли (тут a), вместе с моими 10 яблок, и 3 лимона, всего фруктов 13 )
Переменные переменных
Переменную так же можно поместить в переменную добавив ей еще один знак $, двумя $$, тремя $$$ и так далее знаками.
Создадим переменную m и добавим в нее номер магазина и название.
$m = 'f12';
$$m = 'Магазин фруктов";
выведем нашу переменную и добавленное в нее название и номер.
echo " В магазин $f12 под номером $m, завезли $a яблок, вместе с моими $ya яблок, и $b, всего фруктов " , $ya + $b , "<p>";
Как вы заметили написав значение переменной m, номер магазина мы получили данные из второй переменной $$, которые динамически подставляются в имя переменной. Да и с двойным $$ мы могли также получить название магазина. Поэкспериментируйте и так и с двойным $$.
Домашнее задание
Поменяйте местами значение у переменных $c=57 и $p=13, при помощи арифметического оператора.
Проверить домашнее задание.