Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ruphptherightway.pdf
Скачиваний:
20
Добавлен:
11.02.2015
Размер:
325.54 Кб
Скачать

Основы

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

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

1<?php

2

$a = 5; // 5

как

целое число (integer)

 

3

 

 

 

 

4

var_dump($a ==

5);

// Сравниваются

значения; Вернёт true

5var_dump($a == '5'); // Сравниваются значения (игнорируя типы); Вернёт true

6 var_dump($a === 5); // Сравниваются типы и значения (integer vs. integer); В\

7ернёт true

8 var_dump($a === '5'); // Сравниваются типы и значения (integer vs. string); Ве\

9 рнёт false

10

11/**

12* Строгое сравнение

13*/

14if (strpos('testing', 'test')) { // 'test' находится в 0 позиции, результатом \

15будет 'false'

16// Ваш код...

17}

18

 

 

 

19

vs.

 

 

20

 

 

 

21

if (strpos('testing', 'test') !== false) {

// Результатом будет 'true', т.к. т\

22

ут строгое сравнение (0 !== false)

 

23

// Ваш код...

 

24

}

 

 

 

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

 

 

Таблица сравнения типов¹ ³

 

¹ ²http://php.net/manual/ru/language.operators.comparison.php ¹ ³http://php.net/manual/ru/types.comparisons.php

Основы

46

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

Оператор “If”

При использовании операторов ‘if/else’ внутри функции или класса, существует распространенное заблуждение, что ‘else’ должен быть использован при возврате результатов выполнения. Если условие не выполняется и при этом возвращается значение (return $value), то использование ‘else’ может быть спорным.

1<?php

2function test($a)

3{

4if ($a) {

5 return true;

6} else {

7return false;

8

}

9

}

10

 

11

vs.

12

 

13function test($a)

14{

15if ($a) {

16return true;

17}

18return false; // else использовать не обязательно

19}

Оператор “If”¹

Оператор “Switch”

Оператор “Switch” является отличным способом, чтобы не использовать много операторов “if” с использованием “elseif”, но необходимо знать некоторые вещи:

Оператор “Switch” сравнивает только значения, но не типы данных (равнозначно логической операции ‘==’)

Этот оператор сравнивает выражение с каждым значением, пока не найдёт нужное. Если не нашёл, использует “default” (если определён)

¹http://php.net/manual/ru/control-structures.if.php

Основы

47

Без использования ‘break’, выражение будет сравниваться со всеми значениями попорядку, пока не встретит “break” или “return”

Если вы используете для возврата результата ‘return’ то ‘break’ можно опустить.

1<?php

2

$answer = test(2);

// Этот код выберет 'case 2' и 'case 3'.

3

 

 

4function test($a)

5{

6switch ($a) {

7case 1:

8

// Код...

 

9

break;

// Прекратит выполнение switch тут если $a == 1, т\

10.к. используется 'break'

11case 2:

12

// Код...

// Код без 'break', поэтому будет выполнено сравнен\

13ие с 'case 3'

14case 3:

15

// Код...

 

16

return $result;

// within a function, 'return' will end the functi\

17on

18default:

19

// Код...

20

return $error;

21}

22}

Оператор Switch¹

PHP switch¹

Глобальное пространство имён

Когда вы используете пространство имён (namespaces), вы можете обнаружить, что некоторые функции вам скрыты, недоступны. Что исправить это, указываете что это глобальная функция, использовав обратную косую черту ‘/’ перед именем функции.

¹http://php.net/manual/ru/control-structures.switch.php ¹http://phpswitch.com/

Основы

48

1<?php

2 namespace phptherightway;

3

4function fopen()

5{

6$file = \fopen(); // Функция имеет имя такое же как и глобальная функция '\

7fopen'.

8

// Чтобы их различать используйте в глобальных '\'.

9

}

10

 

11function array()

12{

13

$iterator = new \ArrayIterator(); // ArrayIterator внешний класс. Если испо\

14

льзовать его без '/'

15

// то интерпретатор PHP будет пытаться на\

16йти его в пространстве 'phptherightway'.

17}

Глобальное пространство имён¹

Правила именования¹

Строки

Конкатенация (сцепление)

Если ваша строка на одной строке занимает не рекомендуемую длину (120 символов), используйте конкатенацию.

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

Если используете новую строку при сцеплении строк, делайте относительно оригинальной строки отступы.

¹http://php.net/manual/ru/language.namespaces.global.php ¹http://php.net/manual/ru/userlandnaming.rules.php

Основы

49

1<?php

2

$a = 'Multi-line example';

// Оператор сцепления строк (.=)

3$a .= "\n";

4

$a .= 'of what not to do';

 

5

 

 

6

vs.

 

7

 

 

8

$a = 'Multi-line example'

// Оператор объединения (.)

9

. "\n"

// используя новые строки.

10. 'of what to do';

Операторы для строк¹

Тип строки.

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

Одиночные кавычки

Часто самый быстрый способ отделить строку - эта использовать одинарные кавычки. Скорость заключается в том, что PHP не анализирует строку (не ищет в ней переменные). Одинарные кавычки лучше всего подходят для:

строк, которые не нужно анализировать,

имён переменных, которые нужно написать как текст.

1<?php

2

echo 'Посмотрите как прекрасна моя симпатичная строка.';

// анализ этой строке\

3

не нужен.

 

4

 

 

5/**

6* Выведет:

7*

8 * Посмотрите как прекрасна моя симпотичная строка.

9*/

Одиночные ковычки²

¹http://php.net/manual/ru/language.operators.string.php ²http://www.php.net/manual/ru/language.types.string.php#language.types.string.syntax.single

Основы

50

Двойные кавычки

Двойные кавычки, как швейцарский нож. Они лучше всего используются для:

Escaped strings

строк с использованием переменных,

использования Condensing multi-line concatenation, для удобство просмотра кода.

1<?php

2

echo 'phptherightway is ' . $adjective . '.'

// эта строка использует multipl\

3

e concatenating для

 

4

. "\n"

// отделения переменных от строк\

5и.

6 . 'I love learning' . $code . '!';

7

8 vs.

9

10echo "phptherightway is $adjective.\n I love learning $code!" // А тут использую\

11тся двойные кавычки.

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

1<?php

2$juice = 'plum';

3

echo "I drank some juice made of $juices";

// $juices не определена

4

 

 

5

vs.

 

6

 

 

7$juice = 'plum';

8

echo "I drank some juice made of {$juice}s";

// $juice будет анализирована.

9

 

 

10/**

11* Комплексные переменные также оборачивайте в фигурные скобки.

12*/

13

14 $juice = array('apple', 'orange', 'plum');

15 echo "I drank some juice made of {$juice[1]}s"; // $juice[1] будет анализирован\

16 а.

Двойные кавычки² ¹

² ¹http://www.php.net/manual/ru/language.types.string.php#language.types.string.syntax.double

Основы

51

Nowdoc синтаксис

Nowdoc синтаксис был введён в php 5.3 и используется также как и одинарные кавычки, только для использования нескольких строк не нужно использовать объединение.

1<?php

2

$str = <<<'EOD'

// Инициализируется <<<

3Example of string

4 spanning multiple lines

5 using nowdoc syntax.

6$a does not parse.

7

EOD;

// закрывается 'EOD' (должен быть на новой строке и б\

8

ез отступов).

 

9

 

 

10/**

11* Вывод:

12*

13* Example of string

14* spanning multiple lines

15* using nowdoc syntax.

16* $a does not parse.

17*/

Nowdoc² ²

Heredoc синтаксис

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

1<?php

2

$a =

'Variables';

 

3

 

 

 

4

$str

= <<<EOD

// Инициализируется <<<

5Example of string

6 spanning multiple lines

7 using heredoc syntax.

8$a are parsed.

9

EOD;

// закрывается 'EOD' (должен быть на новой строке и \

10

без отступов).

 

11

 

 

² ²http://www.php.net/manual/ru/language.types.string.php#language.types.string.syntax.nowdoc

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]