Include. Вставляет и выполняет содержимое указанного файла каждый раз, когда встречается оператор. Можно включить этот оператор внутрь цикла, чтобы включить несколько файлов:
$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) { include($files[$i]); }
Так как include() это специальный оператор, требуется заключать его в фигурные скобки при использовании внутри условного оператора.
if ($condition) { include($file);} else { include($other); }
Когда файл исполняется, парсер пребывает в "режиме HTML", то есть будет выводить содержимое файла, пока не встретит первый стартовый тег PHP (<?).
Require. Заменяет себя содержимым указанного файла, похоже на то, как в препроцессоре C работает #include. В отличие от include, нельзя поместить require() внутрь цикла и ожидать, что он включит содержимое другого файла несколько раз в процессе каждой итерации.
require ('header.inc');
include() отличается от require() тем, что оператор include выполняется каждый раз при его встрече, а require() заменяется на содержимое указанного файла безотносительно будет ли выполнено его содержимое или нет.
FUNCTION. Функция может быть объявлена следующим образом:
function foo ($arg_1, $arg_2,..., $arg_n) {
echo "Example function.\n";
return $retval; }
Внутри функции может быть любой верный код PHP, даже объявление другой функции или класса. Функции должны быть определены перед тем, как на них ссылаться.
Возвращение результатов. Результаты возвращаются через необязательный оператор return. Возвращаемый результат может быть любого типа, включая списки и объекты.
function my_sqrt ($num) { return $num * $num; } echo my_sqrt (4); // outputs '16'.
Множественные результаты могут быть возвращены путём возврата списка:
function foo() { return array (0, 1, 2); } list ($zero, $one, $two) = foo();
Аргументы. Информация может быть передана функции через список аргументов, которые являются разделенным запятыми списком переменных и/или констант.
|
PHP поддерживает передачу аргументов по значению (по умолчанию), по ссылке, и значения по умолчанию. Списки аргументов переменной длины не поддерживаются, но того же можно достичь, передавая массивы.
function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1];}
Передача по ссылке. По умолчанию, аргументы функции передаются по значению. Чтобы в функции модифицировать аргументы, можно передать их по ссылке. Чтобы аргумент всегда передавался по ссылке, следует поставить амперсанд (&) перед именем аргумента в объявлении функции:
function foo(&$bar) { $bar.= ' and something extra.'; }
$str = 'This is a string, '; foo ($str); echo $str; // выведет:'This is a string, and something extra.'
Чтобы передать аргумент по ссылке в случае, когда по умолчанию такого не делается, надо добавить амперсанд перед именем аргумента в вызове функции:
function foo ($bar) { $bar.= ' and something extra.';} $str = 'This is a string, ';
foo ($str); echo $str; // выведет 'This is a string, '
foo (&$str); echo $str; // выведет 'This is a string, and something extra.'
Значения по умолчанию. Функции могут определять значения по умолчанию для скалярных аргументов в стиле C++:
function makecoffee ($type = "cappucino") { echo "Making a cup of $type.\n";}
echo makecoffee (); // выведет Making a cup of cappucino.
echo makecoffee ("espresso"); // выведет Making a cup of espresso
Значение по умолчанию должно быть константой, а не переменной или членом класса. Аргументы по умолчанию должны быть справа от всех "неумолчиваемых" аргументов:
function makeyogurt ($type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n";}
echo makeyogurt ("raspberry"); //Этот пример выведет следующее: Making a bowl of raspberry.
|
Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
А так верно:
function makeyogurt ($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n";}
echo makeyogurt ("raspberry"); // выводит следующее: Making a bowl of acidophilus raspberry.
PHP. Работа с классами.
Класс. Класс - это набор переменных и функций, работающих с этими переменными.
Класс определяется следующим образом:
<?php
class Cart {
var $items; // Количество вещей в корзине покупателя
function add_item ($artnr, $num) { // Добавить $num наименований типа $artnr в корзину
$this->items[$artnr] += $num; }
function remove_item ($artnr, $num) { // Убрать $num наименований $artnr из корзины
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true; }
else { return false; } } }?>
Это определения класса Cart, который состоит из связного списка наименований товаров в корзине и двух функций для добавления и удаления вещей из корзины.
Классы это типы, то есть, заготовки для реальных переменных.
Чтобы создавать переменные желаемого типа, надо использовать оператор new:
$cart = new Cart;
$cart->add_item("10", 1);
Создан объект $cart класса Cart. Функция add_item() этого объекта вызывается для добавления 1 товара номер 10 к корзине.
Классы могут быть расширениями других классов. Расширенный класс обладает всеми переменными и функциями базового класса и тем, что определяется при расширении класса. Это делается, используя ключевое слово extends:
class Named_Cart extends Cart {
var $owner;
function set_owner ($name) {
$this->owner = $name; }}
Это определяние класса Named_Cart, который имеет все переменные и функции класса Cart плюс дополнительную переменную $owner и дополнительную функцию set_owner(). Можно создать поименованную корзину обычным образом и установить или получить владельца корзины. Также можно использовать и нормальные функции корзины в поименованной корзине:
|
$ncart = new Named_Cart; // Создать корзину
$ncart->set_owner ("kris"); // Указать владельца
print $ncart->owner; // Распечатать имя владельца корзины
$ncart->add_item ("10", 1); // (унаследовано из обычной корзины)
Внутри функций класса переменная $this означает сам объект. $this->нечто используется для доступа к переменной или функции с именем 'нечто' внутри объекта.
Конструкторы это функции в классе, которые автоматически вызываются, когда создаётся новая переменная данного класса. Функция становится конструктором, когда она имеет такое же имя, как и сам класс.
class Auto_Cart extends Cart {
function Auto_Cart () {
$this->add_item ("10", 1); }}
Это определение класса Auto_Cart который является тем же классом Cart плюс имеет конструктор, который инициализирует корзину при создании, наполняя ее одним товаром типа "10". Конструкторы также могут иметь аргументы, и эти аргументы могут быть необязательными, что делает конструктор более полезным:
class Constructor_Cart {
function Constructor_Cart ($item = "10", $num = 1) {
$this->add_item ($item, $num); }
}
$default_cart = new Constructor_Cart; // Покупаем все одно и то же:
$different_cart = new Constructor_Cart ("20", 17); // А тут что-то новое