2.1 Типы данных. Переменные и константы. Выражения и операции. управляющие конструкции

1 Основной синтаксис

Код на языке PHP окружается символами

<?php ...  ?>

Не рекомендованные варианты: <script language="php"> ... </script><.code>, короткие теги - <? ... > или <?= ... >, стиль ASP - <% ... %> или <%= ... %>.

Каждое выражение в РНР заканчивается точкой с запятой. Перед закрывающим тегом

?>

точку с запятой можно не ставить.

1.1 Типы данных

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

PHP поддерживает восемь простых типов данных.

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

  • boolean (логический);
  • integer (целый);
  • float, double или real (с плавающей точкой);
  • string (строковый).

Два смешанных типа:

  • array (массив);
  • object (объект).

А также два специальных типа:

  • resource (ресурс) ;
  • NULL.

Также могут быть использованы псевдотипы:

  • mixed — один или несколько необязательных параметров;
  • number — число (integer либо float);
  • callback — (string или анонимная функция);
  • void — отсутствие параметров;

Логический тип

Тип boolean (логический тип) выражает истинность значения, то есть переменная этого типа может иметь только два значения – true (истина) или false (ложь).

При выполнении арифметических операций над логической переменной она превращается в обычную числовую переменную (false рассматривается как 0, a true — как 1). Однако операторы ++ и -— (инкремент и декремент) не работают с логическими переменными.

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

Целые числа

Целые числа могут быть указаны:

  • в десятичной (основание 10),
  • шестнадцатеричной (основание 16),
  • восьмеричной (основание 8),
  • двоичной (основание 2)

системе счисления, с необязательным предшествующим знаком (- или +).

Для записи в восьмеричной системе счисления, необходимо поставить пред числом 0 (ноль).

Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x.

Для записи в двоичной системе счисления, необходимо поставить перед числом 0b.

$a = 1234 ; // десятичное число 
$a = 0b11111111; // двоичное число (эквивалентно 255 в десятичной системе)
$a = 0123 ; // восьмеричное число (эквивалентно 83 в десятичной системе) 
$a = 0x1A ; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)

Размер целого числа зависит от платформы. Как правило, максимальное значение целого — около двух миллиардов.

Если будет определено число, превышающее пределы целого типа, оно будет интерпретировано как float.

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

В PHP не существует оператора деления нацело. В результате деления 1/2 получится число с плавающей точкой 0.5.

Числа с плавающей точкой

Числа с плавающей точкой (floatdouble, или real) могут быть определены, например, следующим образом:

$a = 1.234;  
$b = 1.2e3;  
$c = 7E-10;

Преобразование типа

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

Например, для преобразования числа 0.5 или переменной $a=0.5 к целому типу необходимо написать:

(integer)(0.5)
(integer) $a

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

(int)(0.5)

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

Примечание. Чтобы округлить число по стандартным правилам, нужно использовать функцию round() (http://php.net/manual/ru/function.round.php):

echo round(3.4);         // 3
echo round(3.5);         // 4

Строковый тип

Тип string (строка) представляет собой набор символов. В PHP практически не существует ограничений на размер строк.

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

  1. с помощью одинарных кавычек;
  2. с помощью двойных кавычек;
  3. heredoc-синтаксисом;
  4. nowdoc-синтаксисом.

1. Простейший способ определить строку — это заключить ее в одинарные кавычки '.

Чтобы использовать одинарную кавычку внутри такой строки, нужно проэкранировать ее обратной косой чертой \.

Если необходимо написать саму обратную косую черту, нужно ее продублировать \\.

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

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

echo 'Это не будет развернуто: \n новая строка \n '; // Будет выведено: Это не будет развернуто: \n новая строка \n;  
$name = 'Вася';
echo 'Меня зовут $name.'; //Будет выведено: Меня зовут $name.

2. Важным свойством строк в двойных кавычках (") является обработка переменных.

Если строка заключена в двойные кавычки, PHP распознает большее количество управляющих последовательностей для специальных символов:

Управляющие последовательности

Последовательность Значение
\n новая строка
\r возврат каретки
\v вертикальная табуляция
\e escape-знак
\f подача страницы
\\ обратная косая черта
\$ знак доллара
\" двойная кавычка

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

echo "Это будет развернуто: \n новая строка \n "; // Будет выведено: Это будет развернуто:
	// новая строка;  
$name = 'Вася';
echo "Меня зовут $name."; //Будет выведено: Меня зовут Вася.

или так:

$name = 'Вася';
echo "Меня зовут \"$name\"";//Будет выведено: Меня зовут "Вася".

3. Для определения длинных строковых переменных, занимающих несколько строчек, часто используют heredoc-синтаксис.

В этом случае строка должна начинаться с символа <<<, после которого идет открывающий идентификатор:

$str =<<<EOD

Заканчивается строка этим же идентификатором:

EOD
;

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

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

Пример текста, занимающего несколько строк, с помощью синтаксиса heredoc:

<?php
$str = <<<EOD
Пример строки, охватывающей несколько строчек, 
с использованием nowdoc-синтаксиса
EOD
;
?>

Будет выведено: «Меня зовут Вася»:

<?php
$name = 'Вася';
echo <<<EOD
Меня зовут $name
EOD
;
?>


3. Nowdoc-синтаксис — аналог heredoc для строк в одинарных кавычках. Внутри него не осуществляется никаких подстановок. Эта конструкция удобна для внедрения PHP-кода или других больших блоков текста без необходимости его экранирования.

Nowdoc указывается той же последовательностью <<<, что используется в heredoc, но последующий за ней идентификатор заключается в одинарные кавычки, например, <<<'EOT'.

Все условия, действующие для heredoc идентификаторов также действительны и для nowdoc.

$str =<<<'EON'

Пример текста, занимающего несколько строк, с помощью синтаксиса nowdoc:

<?php
$str = <<<'EON'
Пример строки, охватывающей несколько строчек, 
с использованием heredoc-синтаксиса
EON;
?>

Будет выведено: «Меня зовут $name«:

$name = 'Вася';
echo  <<<'EON'
Меня зовут $name
EON;

1.2 Переменные

Переменная в PHP обозначается знаком доллара, за которым следует ее имя. Например:

$my_var

Имя переменной чувствительно к регистру, т.е. переменные $my_var и $My_var различны.

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


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

Присвоение по ссылке

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

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

$foo = 'Вася';             // Присваивает $foo значение 'Вася' 
$bar = &$foo;              // Ссылка на $foo через $bar. 
$bar = "Меня зовут $bar";  // Изменение $bar... echo $bar; 
echo $foo;                 // меняет и $foo.

По ссылке могут быть присвоены только именованные переменные.

$foo = 25 ; 
$bar = &$foo ; 	// Это верное присвоение. 
$bar = &(24 * 7 ); // Неверно; ссылка на неименованное выражение.


Хотя в PHP и нет необходимости инициализировать переменные, это считается очень хорошей практикой.

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

1.3 Константы

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

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

Для определения константы существует функция define().

define("Имя_константы", "Значение_константы", [Нечувствительность_к_регистру])

Например:

define("CONSTANT", "Здравствуй, мир!");

Определение констант, начиная с версии PHP 5.3.0 может быть также осуществлено с помощью ключевого слова const:

<?php 
  const CONSTANT = 'Здравствуй, мир!' ;
  echo CONSTANT ; 
?>

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

Имя константы должно соответствовать тем же правилам, что и другие имена в PHP. Правильное имя начинается с буквы или символа подчеркивания и состоит из букв, цифр и подчеркиваний. По умолчанию имена констант чувствительны к регистру. Для каждой константы это можно изменить, указав в качестве значения аргумента Нечувствительность_к_регистру значение true. Существует соглашение, по которому имена констант всегда пишутся в верхнем регистре.

Получить значение константы можно, указав ее имя. В отличие от переменных, не нужно предварять имя константы символом $. Кроме того, для получения значения константы можно использовать функцию constant() с именем константы в качестве параметра. Для получения списка всех объявленных констант может быть использована функция get_defined_constants().

// определяем константу 
// PASSWORD 
define("PASSWORD","qwerty"); 
// определяем регистронезависимую 
// константу PI со значением 3.14 
define("PI","3.14", true); 
// выведем значение константы PASSWORD, 
// т.е. qwerty 
echo (PASSWORD); 
// тоже выведет qwerty 
echo constant("PASSWORD"); 
echo (password); 
/* выведет password и предупреждение, поскольку мы ввели регистрозависимую константу PASSWORD */ 
echo pi; 
// выведет 3.14, поскольку константа PI 
// регистронезависима по определению

Константы могут быть определены и доступны в любом месте без учета области видимости.

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

Например:

  • __FILE__ хранит имя файла программы (и путь к нему), которая выполняется в данный момент,
  • __FUNCTION__ содержит имя функции,
  • __CLASS__ – имя класса,
  • PHP_VERSION – версия интерпретатора PHP.

С полным списком предопределенных констант можно познакомиться по адресу http://php.net/manual/ru/reserved.constants.php.

1.4 Выражения и операторы

Основными формами, использующимися в выражениях, являются константы и переменные. Например:

$a = 5
$b = ($a = 5)
$b = $a = 5

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

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

$k = $i + $j + 1;

Операторы можно сгруппировать по количеству принимаемых ими значений.

Унарные операторы принимают только одно значение, например, ! (оператор логического отрицания) или ++ (инкремент).

Бинарные операторы принимают два значения; это, например, арифметические операторы + (плюс) и — (минус).

Существует тернарный (условный) оператор, принимающий три значения:

echo ( true ? 'true' : 'false' );

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

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

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

Обозначение Название Описание Пример
++$a Пре- инкремент Увеличивает $a на единицу и возвращает $a <? $a=4; echo «Должно быть 4:» .$a++; echo «Должно быть 6:» .++$a; ?>
$a++ Пост- инкремент Возвращает $a , затем увеличивает $a на единицу
—$a Пре- декремент Уменьшает $a на единицу и возвращает $a
$a— Пост- декремент Возвращает $a , затем уменьшает $a на единицу

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

Обозначение Название Пример
. Конкатенация ( сложение строк ) $c = $a . $b (это строка, состоящая из $a и $b )

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

Обозначение Название Описание Пример
= Присваивание Переменной слева от оператора будет присвоено значение, полученное в результате выполнения каких-либо операций или переменной / константы с правой стороны $a = ($b = 4) +5; ( $a будет равна 9 , $b будет равна 4 )
+= Составное присваивание (сокращение). Прибавляет к переменной число и затем присваивает ей полученное значение $a += 5; (эквивалентно $a = $a + 5; )
.= Сокращенно обозначает комбинацию операций конкатенации и присваивания (сначала добавляется строка, потом полученная строка записывается в переменную ) $b = «Привет «; $b .= «всем»; (эквивалентно $b = $b . «всем»; )В результате: $b=»Привет всем»

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

Обозначение Название Описание Пример
and И $a и $b истинны ( true ) $a and $b
&& И $a && $b
or Или Хотя бы одна из переменных $a или $b истинна (возможно, что и обе) $a or $b
|| Или $a || $b
xor Исключающее или Одна из переменных истинна. Случай, когда они обе истинны, исключается $a xor $b
! Инверсия (NOT) Если $a=true , то !$a=false и наоборот ! $a

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

Обозначение Название Описание Пример
== Равенство Значения переменных равны $a == $b
=== Эквивалентность Равны значения и типы переменных $a === $b
!= Неравенство Значения переменных не равны $a != $b
<> Неравенство $a <> $b
!== Неэквивалентность Переменные не эквивалентны $a !== $b
< Меньше $a < $b
> Больше $a > $b
<= Меньше или равно $a <= $b
>= Больше или равно $a >= $b

Дополнительно об операторах сравнения см. http://php.net/manual/ru/language.operators.comparison.php#language.operators.comparison.ternary

Полный список и порядок выполнения операторов см. http://php.net/manual/ru/language.operators.precedence.php

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

Условные операторы

Условный оператор if

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

if (выражение) блок_выполнения

Здесь выражение — любое правильное выражение PHP. В процессе обработки скрипта выражение преобразуется к логическому типу. Если в результате преобразования значение выражения истинно (true ), то выполняется блок_выполнения. В противном случае блок_выполнения игнорируется.

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

Правила преобразования выражения к логическому типу:

1. В false преобразуются следующие значения:

  • логическое false
  • целый ноль ( 0 )
  • действительный ноль ( 0.0 )
  • пустая строка и строка «0»
  • массив без элементов
  • объект без переменных (об объектах будет рассказано в одной из следующих лекций)
  • специальный тип NULL

2. Все остальные значения преобразуются в true .

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

Структуру оператора if , расширенного с помощью оператора else , можно представить следующим образом:

if (выражение) 
    блок_выполнения 
else 
    блок_выполнения1

Конструкцию if...else можно интерпретировать примерно так: если выполнено условие (т.е. выражение=true ), то выполняем действия из блока_выполнения, иначе – действия из блока_выполнения1. Использовать оператор else не обязательно.

Оператор elseif
Еще один способ расширения условного оператора if – использование оператора elseif . elseif – это комбинация else и if . Как и else , он расширяет if для выполнения различных действий в том случае, если условие, проверяемое в if , неверно. Но в отличие от else , альтернативные действия будут выполнены, только если elseif-условие является верным. Структуру оператора if , расширенного с помощью операторов else и elseif , можно представить следующим образом:

if (выражение) 
    блок_выполнения 
elseif(выражение1) 
    блок_выполнения1 
... 
else 
    блок_выполненияN

Операторов elseif может быть сразу несколько в одном if-блоке. elseif-утверждение будет выполнено, только если предшествующее if-условие является false, все предшествующие elseif-условия являются false, а данное elseif-условие – true.

Оператор switch
Еще одна конструкция, позволяющая проверять условие и выполнять в зависимости от этого различные действия, – это оператор switch .
На русский язык название данного оператора можно перевести как «переключатель». В зависимости от того, какое значение имеет переменная, он переключается между различными блоками действия. switch
очень похож на оператор if... elseif ...else или набор операторов if. Структуру switch можно записать следующим образом:

switch (выражение или переменная){
    case значение1: блок_действий1 break;
    case значение2: блок_действий2 break;
    ...
    default: блок_действий_по_умолчанию 
}

В отличие от if , здесь значение выражения не приводится к логическому типу, а просто сравнивается со значениями, перечисленными после ключевых слов case ( значение1 , значение2 и т.д.).

Если значение выражения совпало с каким-то вариантом, то выполняется соответствующий блок_действий – от двоеточия после совпавшего значения до конца switch или до первого оператора break, если такой найдется.

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

Выражение в switch вычисляется только один раз, а в операторе elseif – каждый раз, поэтому, если выражение достаточно сложное, то switch работает быстрее.

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

Циклы

В PHP существует несколько конструкций, позволяющих выполнять повторяющиеся действия в зависимости от условия. Это циклы while , do..while , foreach и for .

Цикл while предписывает PHP выполнять команды блока_выполнения до тех пор, пока выражение вычисляется как true (здесь, как и в цикле if , происходит приведение выражения к логическому типу). Значение выражения проверяется каждый раз в начале цикла, так что, даже если его значение изменилось в процессе выполнения блока_выполнения, цикл не будет остановлен до конца итерации
(т.е. пока все команды блока_выполнения не будут исполнены).

//Четные цифры от 2 до 8:
$i = 1; while ($i < 10) {
  if ($i % 2 == 0) print $i; 
    $i++; 
}

Циклы do..while очень похожи на циклы while, с той разницей, что истинность выражения проверяется в конце цикла, а не в начале. Благодаря этому блок_выполнения цикла do...while гарантированно выполняется хотя бы один раз.

do {блок_выполнения} while (выражение);
$i = 12; 
do{ 
  if ($i % 2 == 0) print $i; 
    $i++;  
}while ($i<10)

Циклы for напоминают соответствующие циклы C.

Структура:

for (выражение1; выражение2; выражение3) {
    блок_выполнения
};

либо

for (выражение1; выражение2; выражение3): 
    блок_выполнения; 
endfor;

Здесь условие состоит сразу из трех выражений.

Первое выражение выражение1 вычисляется один раз в начале цикла.

В начале каждой итерации вычисляется выражение2. Если оно является true, то цикл продолжается, и выполняются все команды блока_выполнения. Если выражение2 вычисляется как false, то исполнение цикла останавливается.

В конце каждой итерации (т.е. после выполнения всех команд блока_выполнения ) вычисляется выражение3.

Каждое из выражений 1, 2, 3 может быть пустым. Если выражение2 является пустым, то это значит, что цикл должен выполняться неопределенное время (в этом случае PHP считает это выражение всегда истинным). В этом случае цикл можно останавливать, используя оператор break.

Например, все четные цифры можно вывести с использованием цикла for таким образом:

for ($i=0; $i<10; $i++){
    if ($i % 2 == 0) print $i; 
}

Операторы break и continue

Чтобы немедленно завершить работу цикла либо отдельной его итерации, используют операторы break и continue. Оператор break заканчивает выполнение текущего цикла for , foreach , while, do..while или switch . break может использоваться с числовым аргументом, который говорит, работу скольких управляющих структур, содержащих его, нужно завершить.

$i=1; 
while ($i) {
  $n = rand(1,10); // генерируем произвольное число // от 1 до 10 
  echo "$i:$n "; // выводим номер итерации и сгенерированное число 
  if ($n==5) break; // Если было сгенерировано число 5, то прекращаем работу цикла.  
  echo "\n"; 
  $i++; 
} 
echo "\ncount $i"; // выводим количество итераций

Результатом работы этого скрипта будет примерно следующее:

1:7
2:2
3:5  
count 3

Если после оператора break указать число, то прервется именно такое количество содержащих этот оператор циклов.

Иногда нужно не полностью прекратить работу цикла, а только начать его новую итерацию.

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

Если заменить в примере предыдущего параграфа оператор break на continue, получится.

$i=1; 
while ($i<=9) {
  $n = rand(1,10); // генерируем произвольное число // от 1 до 10 
  echo "$i:$n "; // выводим номер итерации и сгенерированное число 
  if ($n==5) { 
    echo "\nnew\n"; // Если было сгенерировано число 5, то начинаем новую итерацию цикла, $i не увеличивается
    continue; 
  } 
  echo "\n"; 
  $i++; 
} 
--$i; 
echo "\ncount $i ";

Результатом работы этого скрипта будет, например:

1:9 
2:2 
3:5 
new
3:3 
4:3 
5:6 
6:2 
7:8 
8:2 
9:10 

count 9

После выполнения оператора continue в случае получения числа 5 работа цикла не заканчивается, а происходит переход к новой итерации, при этом счетчик цикла не меняется, поскольку он находится после оператора continue.
Можно заменить оператор continue на if — проверку истинности выражения:

$i=1; 
while ($i<4) {
  $n = rand(1,10);
  if ($n!==5) {
    echo "$i:$n\n";
    $i++;
  }
} 
echo "\ncount $i ";

Альтернативный синтаксис управляющих структур

PHP предлагает альтернативный синтаксис для некоторых своих управляющих структур, а именно — для if , while , for , foreach и switch . В каждом случае открывающую скобку нужно заменить на двоеточие ( :), а закрывающую – на endif; , endwhile; и т.д. соответственно, например:

if(выражение): 
    блок_выполнения 
endif;

Для конструкции switch , как и для if , возможен альтернативный синтаксис, где открывающая switch фигурная скобка заменяется двоеточием, а закрывающая – endswitch; соответственно.

Оператор goto

Оператор goto используется для перехода в другую часть программы. Место, куда необходимо перейти, указывается с помощью метки, за которой ставится двоеточие, а после оператора goto указывается эта метка. Однако по goto нельзя ни перейти внутрь функции, ни выйти за ее границы. Также нельзя перейти внутрь любой циклической структуры или оператора switch. Из них можно только выйти. Обычным применением оператора goto является использование его вместо break:

for( $i = 0 , $j = 50 ; $i < 100 ; $i ++) { 
  while( $j --) { 
    if( $j == 17 ) goto end ; 
  } 
} 
echo "i = $i " ; 
end : 
echo 'j hit 17' ;

Результат выполнения данного примера:

j hit 17

Следующий пример работать не будет:

goto loop ; 
for( $i = 0 , $j = 50 ; $i < 100 ; $i ++) { 
   while( $j --) { 
     loop : 
   } 
 } 
echo " $i = $i " ;

Результат выполнения данного примера:

Fatal error: 'goto' into loop or switch statement is disallowed in script on line 2

Здесь была предпринята попытка войти внутрь циклической структуры.

2 Символические (динамические) ссылки

Символические (динамические) ссылки — это строковые переменные, хранящие имя другой переменной. Их также называют «переменные переменных».

Для доступа к значению ссылки используется двойной знак доллара (дополнительный знак $ перед именем ссылки). Например:

$var = "d_var"; //была создана переменная $var и ей присвоено значение "d_var"
$$var = "hello"; //была создана переменная $d_var и ей присвоено значение "hello" (то же, что и $d_var = "hello")
echo $$var; // выводит значение переменной $d_var  - строку "hello"
$$var = "goodbye"; // присваивает переменной $d_var новое значение "goodbye"
echo $$var; // выводит значение переменной $d_var - строку "goodbye"

Ссылка $$var — динамическая, поскольку ее имя может меняться вместе с изменением $var. Если поменять значение переменной $var и присвоить новое значение $$var, то создастся новая переменная, а предыдущая переменная останется со старым значением

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

Внутри строк динамические ссылки выводятся с помощью фигурных скобок:

echo "Hello ${$var}";

Можно создавать переменные динамически и таким образом:

${"x".$i} = 10;

Если, например, значение переменной $i было равно 7, то в результате будет создана переменная $x7 со значением 10.

Динамические ссылки также называют «мягкими«. В отличие от таких ссылок ссылки вида &$var , представляющие собой синоним, или другое имя переменной, называются «жесткими«.

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

3 Тип null

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

$my_var = NULL ;

Переменная считается null, если:

  • ей была присвоена константа NULL .
  • ей еще не было присвоено никакого значения.
  • она была удалена с помощью unset() .

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

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

2 Примеры программ

2.1 Целая часть вещественного числа

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

<?php
$x = 2.8;
$n = (int) $x;
echo "Целая часть: $n";
if ($x - $n > 0.5)
    echo "<br/>Вы потеряли ".($x - $n)."!";
?>

2.2 Решение линейного уравнения

Следующая программа находит решение линейного уравнения вида

a*x + b= 0

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

<?php 
$a = 2;
$b = 4;
if ($a != 0) {
  $x = -$b / $a;
   echo "<p>Корень: <span style='color:blue;'>$x</span></p>";
}
else {
  if ($b == 0)
    echo "<p style="color:blue;">Бесчисленное множество решений</p>";
 else
   echo "<p style="color:red;">Нет решений</p>";
}

2.3 Заголовки

Необходимо написать программу, в которой по заданному n от 1 до 6 формируется html-заголовки вида Заголовок 1, Заголовок 2Заголовок n. Использовать цикл for. Формировать имена заголовков с помощью параметра цикла i.

Решение.

<?php
$n = 5;
for ($i = 1; $i <= $n; $i++)
   echo "<h$i>Заголовок $i</h$i>";
?>

Вариант решения с использованием операции конкатенации строк.

<?php
$n = 5;
for ($i = 1; $i <= $n; $i++)
    echo "<h".$i.">Заголовок ".$i."</h$i>";
?>

3 Задания на самостоятельную работу

3.1 Температура

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

x
Текст
меньше 0
«Мороз!»
0
«Не мороз и не тепло…»
больше 0
«Тепло!»

Оформить вывод с помощью тегов html (использовать для разного вывода разный цвет).

Максимальный балл — 10.

Дополнительно. Генерировать температуру случайным образом с помощью rand(min, max),  где min и max — минимальная и максимальная температура.

Максимальный балл — 11.

3.2 У врача

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

x
Текст
меньше 37.7
«Здоров!»
37.7
«Что-то нездоровится…»
больше 37.7
«Болен!»

Максимальный балл — 10.

Дополнительно. Генерировать температуру случайным образом с помощью rand(min, max)/10, где min и max — минимальная и максимальная температура, умноженная на 10 (например, 360 и 410).

Максимальный балл — 11.

3.3 Площадь круга

По заданному радиусу вычислите площадь круга. Число пи задайте с помощью константы. Изобразите круг с заданным радиусом средствами html и css (как элемент <div> с соответствующими стилями).

Максимальный балл — 10.

Дополнительно. Генерировать радиус случайным образом с помощью rand(min, max).

Максимальный балл — 11.

3.4 Решение квадратного уравнения

Разработайте программу, которая решает квадратное уравнение:

a*x2 + b*x +c = 0

См. http://school-assistant.ru/?predmet=algebra&theme=kvadratnie_uravnenija
Примечание. Найти квадратный корень числа $n можно так:

echo sqrt($n);

Максимальный балл — 9.

Оформите вывод с помощью тегов html.

Максимальный балл — 10.

Дополнительно. Генерировать a, b, и c случайным образом с помощью rand(min, max).

Максимальный балл — 11.

3.5 Школа

Напишите программу, которая по целому n выводит это число и соответствующую строку с помощью инструкции switch.

n
Текст
1
Учим буквы
2
Учим таблицу умножения
12
Почти все выучили!
другие значения
Такого класса у нас нет!

Максимальный балл — 10.

Генерировать число n случайным образом с помощью rand(1, 13).

Максимальный балл — 11.

3.6 Таблица

Напишите программу, в которой по заданному n формируется html-таблица с n строчками и двумя колонками. В первой колонке печатать номер строчки, во второй колонке — выводить картинки с названиями img_1.jpg, img_2.jpg, … img_n.jpg. Использовать цикл for. Формировать имена картинок с помощью параметра цикла i.

Максимальный балл — 11.

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

Максимальный балл — 12.

3.7 Динамические ссылки*

Напишите программу, создающую динамически в цикле 10 переменных вида $x1, $x2 ... $x10. Проинициализировать переменные значениями 1, 2, … 10 и вывести на печать.

Максимальный балл — 12.

Примечание.  Рекомендуется использовать синтаксис создания динамических ссылок:

${"x".$i}