Основные конструкции языка PHP.

Типы данных и переменные

<?php

# Числа

$one = 1;
$number = -100;

# Строки

$str1 = 'i am a string';
$str2 = "i am a string too";

# Логические значения

$yes = true;
$no = false;

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

<?php

# Числа

$one = (int) '234';
$two = (string) 34;

Операции

<?php

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

1 + 5 - 8 * 6 / 2 ** 3 % 4;

// Логические операции

true || false && !true

// Создание переменных

$str = 'i am a string';

// Обращение к символам строки

$str[0]; // i
print_r("{$str}"); // => i am a string
print_r($str); // => i am a string

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

  1. if

  2. <?php
    if (логическое выражение)
    оператор;
    ?>
    

    Если логическое выражение истинно (true), то оператор будет исполнен

    Соответственно, если логическое выражение ложно (false), то оператор не исполняется. :

    <?php
    if ($a > $b) echo "значение a больше, чем b";
    ?>
    
  3. else

  4. <?php
    if (логическое выражение)
    инструкция_1;
    else
    инструкция_2;
    ?>
    

    Если логическое выражение истинно, то выполняется инструкция_1

    Иначе — выпооняется инструкция_2.

    <?php
    if ($a > $b) {
    echo "a больше, чем b";
    } else {
    echo "a НЕ больше, чем b";
    }
    ?>
    
  5. if-else.

  6. <?php
    if (логическое_выражение):
    команды;
    elseif(другое_логическое_выражение):
    другие_команды;
    else:
    иначе_команды;
    endif
    ?>
    
  7. elseif

  8. elseif – это комбинация конструкций if и else. Эта конструкция расширяет условную конструкцию if-else.
    <?php
    if (логическое_выражение_1)
    оператор_1;
    elseif (логическое_выражение_2)
    оператор_2;
    else
    оператор_3;
    ?>
    

    Пример:

    <?php
    if ($a > $b) {
    echo "a больше, чем b";
    } elseif ($a == $b) {
    echo "a равен b";
    } else {
    echo "a меньше, чем b";
    }
    ?>
    

Циклы:

  1. while

  2. <?php
    while (логическое выражение)
    тело цикла;
    ?>
    

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

    Пример:

    <?php
    $x=0;
    while ($x++<10) echo $x;
    // Выводит 12345678910
    ?>
    
  3. do while

  4. В отличие от цикла while, этот цикл проверяет значение выражения не до, а после каждого прохода. Таким образом, тело цикла выполняется хотя бы один раз.

    <?php
    do
    {
    тело_цикла;
    }
    while (логическое_выражение);
    ?>
    

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

    <?php
    $x = 1;
    do {
    echo $x;
    } while ($x++<10);
    ?>
    
  5. for

  6. <?php
    for (инициализирующие_команды; условие_цикла; команды_после_итерации) { тело_цикла; }
    ?>
    

    Цикл for начинает свою работу с выполнения инициализирующих_команд.
    Данные команды выполняются только один раз.

    После этого проверяется условие_цикла, если оно истинно (true), то выполняется тело_цикла. После того, как будет выполнен последний оператор тела, выполняются команды_после_итерации. Затем снова проверяется условие_цикла. Если оно истинно (true), выполняется тело_цикла и команды_после_итерации.

    <?php
    for ($x=0; $x<10; $x++) echo $x;
    //Выведит 0123456789
    ?>
    

    Для цикла for имеется и альтернативный синтаксис:

    <?php
    for(инициализирующие_команды; условие_цикла; команды_после_итерации):
    операторы;
    endfor;
    ?>
    
  7. foreach

  8. <?php
    foreach (массив as $ключ=>$значение)
    команды;
    ?>
    

    Команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=>значение оказывается в переменных $ключ и $значение.

    Пример:

    <?php
    $names["Иванов"] = "Андрей";
    $names["Петров"] = "Борис";
    $names["Волков"] = "Сергей";
    $names["Макаров"] = "Федор";
    foreach ($names as $key => $value) {
    echo "<b>$value $key</b><br>";
    }
    ?>
    

    Рассмотренный сценарий выводит:

    Андрей Иванов
    Борис Петров
    Сергей Волков
    Федор Макаров
    

    У цикла foreach имеется и другая форма записи, которую следует применять, когда нас не интересует значение ключа очередного элемента.

    <?php
    foreach (массив as $значение)
    команды;
    ?>
    

    Цикл foreach оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть “видны” из тела цикла. Что позволяет в качестве массива использовать не только переменную, но и результат работы какой-нибудь функции, возвращающей массив (в этом случае функция будет вызвана всего один раз – до начала цикла, а затем работа будет производиться с копией возвращенного значения).

  9. break

  10. конструкция break, которая осуществляет немедленный выход из цикла.

    <?php
    break; // По умолчанию
    break(номер_цикла); // Для вложенных циклов (указывается номер прерываемого цикла)
    ?>
    

    Пример:

    <?php
    $x=0;
    while ($x++<10) {
    if ($x==3) break;
    echo "<b>Итерация $x</b><br>";
    }
    // Когда $x равен 3, цикл прерывается
    ?>
    

    Если нам нужно прервать работу определенного (вложенного) цикла, то нужно передать конструкции break параметр – номер_цикла, например, break(1).

    Нумерация циклов выглядит так:

    for (...) // Третий цикл
    {
    for (...) // Второй цикл
    {
    for (...) // Первый цикл
    {
    }
    }
    }
    
  11. continue

  12. Конструкция continue завершает текущую итерацию цикла и переходит к новой.

    <?php
    $x=0;
    while ($x++<5) {
    if ($x==3) continue;
    echo "<b>Итерация $x</b><br>";
    }
    // Цикл прервется только на третьей итерации
    ?>
    

    Cкрипт выведет:

    Итерация 1
    Итерация 2
    Итерация 4
    Итерация 5
    

Конструкция выбора switch-case

<?php
switch(выражение) {
case значение1: команды1; [break;]
case значение2: команды2; [break;]
. . .
case значениеN: командыN; [break;]
[default: команды_по_умолчанию; [break]]
}
?>

Вычисляется выражение;
команда N выполняется если значение N равно выражению.

Пример в сравнении с if-else:

<?php
$x=1;
// Используем if-else
if ($x == 0) {
echo "x=0<br>";
} elseif ($x == 1) {
echo "x=1<br>";
} elseif ($x == 2) {
echo "x=2<br>";
}
// Используем switch-case
switch ($x) {
case 0:
echo "x=0<br>";
break;
case 1:
echo "x=1<br>";
break;
case 2:
echo "x=2<br>";
break;
}
?>

Функции

<?php

// Определение
function sum(a,b)
{
    $c = a + b;
    echo $c;
}

// Вызов
sum(3,5); // выводит 8

Пример выше не является чистой функцией

Конструкция возврата значений return

<?php
function retfunct()
{
return 7;
}
echo retfunct();   // выводит '7'.
?>

Пример возврата конструкцией return массивов:

<?php
function numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = numbers();
echo $zero;
echo $one;
echo $two;
// Выводит '012'
?>

Конструкции включений:

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

  1. require()

  2. Конструкция require позволяет включать код до выполнения сценария.

    require имя_файла;
    

    При запуске программы интерпретатор заменит инструкцию на содержимое файла имя_файла (этот файл может также содержать сценарий на PHP).

  3. include

  4. Конструкция include также предназначена для включения файлов в код сценария PHP. В отличие от конструкции require конструкция include позволяет включать файлы в код PHP скрипта во время выполнения сценария.

    include имя_файла;
    
  5. require_once и include_once

  6. Используя конструкции однократного включения require_once и include_once, можно быть уверенным, что один файл не будет включен дважды. Работают конструкции require_once и include_once так же, как и requre и include. Разница в их работе лишь в том, что перед включением файла интерпрететор проверяет, включен ли указанный файл ранее или нет. Если да, то файл не будет включен вновь.

 
<?php

// file: print.php

function sayHi()
{
    print_r('Hi!');
}

// file: index.php

require_once 'print.php';

sayHi(); // => Hi!

Рассмотрим следующий пример

<?php

// file: print.php

print_r("Hi from print.php!\n");


// file: index.php

require_once 'print.php';

print_r("Hi from index.php!\n");

Попробуем запустить:

$ php index.php
Hi from print.php!
Hi from index.php!

Видно, что сначала выполнился код, находящийся во включаемом файле, и только потом код в файле index.php. Этот механизм рекурсивен по своей природе: если во включаемом файле есть другой включаемый файл, то сначала исполнится он. Такое поведение чем-то похоже на матрешку. Можно сказать, что весь код всех файлов проекта находится в одном пространстве и доступен для использования напрямую.

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

Эти два условия важны, так как код, опирающийся на них, получается более качественным и простым. В отличие от require_once, остальные конструкции не отвечают этим требованиям: require исполняет включаемый файл каждый раз, а include и include_once не приводят к ошибке в ситуации, когда файла не существует.