Итак, делимся общими соображениями.
Соображение №1
Допускается следующее приведение типов:
* (int), (integer) - приведение к целому
* (real), (double), (float) - приведение к типу double
* (string) - приведение к строке
* (array) - приведение к массиву
* (object) - приведение к объектной переменной
Соображение №2
Массив может сортироваться функциями asort(), arsort(), ksort(), rsort(),
sort(), uasort(), usort(), и uksort() в зависимости от типа желаемой сортировки.
Подсчет количества элементов массива осуществляется функцией count().
Перемещаться по массиву позволяют функции next() и prev().
Другим типовым способом перемещения по массиву является использование функции each().
Соображение №3
Использование __FILE__ и __LINE__
Код
<?php
function report_error($file, $line, $message) {
echo "An error occured in $file on line $line: $message.";
}
report_error(__FILE__,__LINE__, "Something went wrong!");
?>
Соображение №4
Вы можете определить дополнительные константы с помощью функций define() и undefine().
Пример. Описание констант
Код
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
undefine ("CONSTANT");
?>
Соображение №5
Добавление 3 к текущему значению $a может быть записано как '$a+=3'.
Это значит следующее : 'возьми значение $a, добавь к нему 3 и присвой
это обратно $a. Кроме того, что это быстрее и понятнее, такой тип
выражений быстрее исполняется. Значение '$a+=3' как и значение обычного
присваивания это присвоенное значение. Заметьте, что оно не равно 3, а
является общим значением $a и 3. Любой бинарный (имеющий 2 операнда -
прим. авт.) оператор может быть записан таким методом, например : '$a-=5'
(вычесть 5 из значения $a), '$b*=7' (умножиить значение $a на 7) и так далее.
Соображение №6
Передача по ссылке
По умолчанию, аргменты функции передаются по значению. Если вы хотите
в функции модифицировать аргументы, то можете передать их по ссылке.
Если вы хотите, чтобы аргумент всегда передавался по ссылке, то следует
поставить амперсенд (&) перед именем аргумента в объявлении функции :
Код
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 ();
echo makecoffee ("espresso");
Этот пример выведет следующее :
Цитата("значение")
Making a cup of cappucino.
Making a cup of espresso.
Значение по умолчанию должно быть константой, а не переменной
или, к примеру, членом класса.
Учтите, что когда вы объявляете аргументы по умолчанию, они
должны быть справа от всех "неумолчальных" аргументов, в
противном случае это не будет работать, как задумано.
Соображение №7
CLASS
Класс - это набор переменных и функций, работающих с этими переменными.
Класс определяется следующим образом :
Код
<?php
class Cart {
var $items; // Количество вещей в корзине покупателя
// Добавить $num наименований типа $artnr в корзину
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
// Убрать $num наименований $artnr из корзины
function remove_item ($artnr, $num) {
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);