Сделай Сам Свою Работу на 5

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





 

PHP поддерживает один оператор управления ошибками: знак @. В случае, если он предшествует какому-либо выражению в PHP-коде, любые сообщения об ошибках, генерируемые этим выражением, будут проигнорированы.

В случае, если установлена опция track_errors, все генерируемые сообщения об ошибках будут сохраняться в переменной $php_errormsg. Эта переменная будет перезаписываться при возникновении каждой новой ошибки, поэтому в случае необходимости проверяйте её сразу же (пример 2.7.6.1):

 

// Преднамеренная ошибка при работе с файлами
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");

// работает для любых выражений, а не только для функций
$value = @$cache[$key];
// В случае если ключа $key нет, сообщение об ошибке не будет отображено

 

Оператор @ работает только с выражениями. Есть простое правило: если произвольная языковая конструкция возвращает значение, значит вы можете использовать предшествующий ей оператор @. Например, вы можете использовать @ перед именем переменной, произвольной функцией или вызовом include(), константой и так далее. В то же время вы не можете использовать этот оператор перед определением функции или класса, условными конструкциями, такими как if или foreach. Оператор @ не подавляет вывод ошибок, возникающих на стадии синтаксического разбора скрипта.



 

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

 

PHP поддерживает один оператор исполнения: обратные кавычки (``). Обратите внимание, что это не одиночные кавычки. PHP пытается выполнить строку, заключенную в обратные кавычки, как консольную команду, и возвращает полученный вывод (т.е. он не просто выдаётся на выходе а, например, может быть присвоен переменной). Использование обратных кавычек аналогично использованию функции shell_exec() (пример 2.7.7.1):

 

<?

$output = `ls -al`;

echo "<pre>$output</pre>";

?>

 

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

 

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

 

PHP, аналогично C, поддерживает префиксные и постфиксные операторы инкремента и декремента.

 

 

Пример Название Действие
++$a Префиксный инкремент Увеличивает $a на единицу и возвращает значение $a.
$a++ Постфиксный инкремент Возвращает значение $a, а затем увеличивает $a на единицу.
--$a Префиксный декремент Уменьшает $a на единицу и возвращает значение $a.
$a-- Постфиксный декремент Возвращает значение $a, а затем уменьшает $a на единицу.

 



Приведём пример кода (пример 2.7.8.1):

 

echo "<h3>Постфиксный инкремент</h3>";
$a = 5;
echo "Должно быть 5: " . $a++ . "<br />\n";
echo "Должно быть 6: " . $a . "<br />\n";

echo "<h3>Префиксный инкремент</h3>";
$a = 5;
echo "Должно быть 6: " . ++$a . "<br />\n";
echo "Должно быть 6: " . $a . "<br />\n";

echo "<h3>Постфиксный декремент</h3>";
$a = 5;
echo "Должно быть 5: " . $a-- . "<br />\n";
echo "Должно быть 4: " . $a . "<br />\n";

echo "<h3>Префиксный декремент</h3>";
$a = 5;
echo "Должно быть 4: " . --$a . "<br />\n";
echo "Должно быть 4: " . $a . "<br />\n";

 

PHP следует соглашениям Perl (в отличие от С) касательно выполнения арифметических операций с символьными переменными. Например в Perl 'Z'+1 будет вычислено как 'AA', в то время как в C 'Z'+1 будет вычислено как '[' ( ord('Z') == 90, ord('[') == 91 ). Следует учесть, что к символьным переменным можно применять операцию инкремента, в то время как операцию декремента применять нельзя (пример 2.7.8.2):

 

$i = 'W';
for($n=0; $n<6; $n++)
echo ++$i . "\n";

/*
Результат работы будет следующий:
X
Y
Z
AA
AB
AC
*/

 

 

Инкрементирование или декрементирование булевых переменных не приводит ни к какому результату.

 

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

 

В PHP есть два оператора для работы со строками. Первый - оператор конкатенации ('.'), который возвращает объединение левого и правого аргумента. Второй - оператор присвоения с конкатенацией, который присоединяет правый аргумент к левому (пример 2.7.9.1):



 

$a = "Hello ";
$b = $a . "World!";

// $b содержит строку "Hello World!"

$a = "Hello ";
$a .= "World!";

// $a содержит строку "Hello World!"

 

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

 

Пример Название Результат
$a + $b Объединение Объединение массива $a и массива $b.
$a == $b Равно TRUE в случае, если $a и $b содержат одни и те же элементы.
$a === $b Тождественно равно TRUE в случае, если $a и $b содержат одни и те же элементы в том же самом порядке.
$a != $b Не равно TRUE если массив $a не равен массиву $b.
$a <> $b Не равно TRUE если массив $a не равен массиву $b.
$a !== $b Тождественно не равно TRUE если массив $a не равен тождественно массиву $b.

 

Оператор + присоединяет правый массив к массиву, размещенному слева НЕ перезаписывая элементы с дублирующимися ключами. Пример 2.7.10.1:

 

$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Объеденение $a и $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Объединение $b и $a
echo "Union of \$b and \$a: \n";
var_dump($c);

 

 

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

 

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

Оператор instanceof был добавлен в PHP 5. До этого использовалась конструкция is_a(), которая на данный момент не рекомендуется к применению, более предпочтительно использовать оператор instanceof . Пример 2.7.11.1:

 

class A { }

class B { }

 

$thing = new A;

 

if ($thing instanceof A) {

echo 'A';

}

if ($thing instanceof B) {

echo 'B';

}

 

Поскольку объект $thing является экземпляром класса A, и никак не B, то будет выполнен только первый, опирающийся на класс A.

 

 

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

 

2.8.1. Управляющие конструкции: if ... else

 

К операторам выбора относят: условный оператор (if...else) и переключатель (switch). Синтаксис условного оператора:

 

if (condition) statement_1 else statement_2

 

Условие condition может быть любым выражением. Если оно истинно, то выполняется оператор statement_1. В противном случае выполняется оператор statement_2. Допустима сокращенная форма записи условного оператора, в которой отсутствуют else и оператор statement_2.

В свою очередь, операторы statement_1 и statement_2 могут быть условными, что позволяет организовывать цепочки проверок любой глубины вложенности. И в этих цепочках каждый условный оператор может быть как полным, так и сокращенным. В связи с этим возможны ошибки неоднозначного сопоставления if и else.

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

 

<?

$x = 1;

$y = 1;

if($x == 1)

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

else echo("x!=1");

?>

 

При х равном 1 и у равном 1 совершенно справедливо печатается фраза «х = 1 and у = 1». Однако фраза «х != 1» может быть напечатана при х равном 1 и при у не равном 1, так как else соответствует ближайшему if. Внешний условный оператор, где проверяется $x == 1, является сокращенным и в качестве statement_1 включает полный условный оператор, где проверяется условие $у == 1. Т.е. проверка этого условия выполняется только при х равном 1. Простым правильным решением этой задачи является применение фигурных скобок, т.е. построение составного оператора, где фигурными скобками можно ограничить область действия внутреннего условного оператора, сделав его неполным. Тем самым внешний оператор превращается в полный условный (пример 2.8.1.2):

 

<?

$x = 1;

$y = 1;

if($x==1)

{

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

}

else echo("x!=1");

?>

 

Заметим, что проверка дополнительных условий возможна при помощи оператора elseif. Оператор if может включать сколько угодно блоков elseif, но else в каждом if может быть только один. Как правило, в конструкциях if…elseif…else оператор else определяет, что нужно делать, если никакие другие условия не являются true. Однако, вообще говоря, использование оператора elseif довольно сильно ухудшает читабельность кода, и лучше в этом случае пользоваться переключателем (switch).

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.