Отправляет email-рассылки с помощью сервиса Sendsay

Php от А до Я

  Все выпуски  

Php от А до Я Синтаксис и грамматика. Часть вторая


Информационный Канал Subscribe.Ru

PHP от А до Я. Рассылка сайта phpcell.webhost.ru

Выпуск N8 от 19.07.2004

Предыдущие выпуски можно посмотреть по адресу http://phpcell.webhost.ru/arhiv/


Новости

На сайте добавлены статьи:


Синтаксис и грамматика. Часть вторая

Инициализация переменной

Для инициализации переменной в PHP  вы просто присваиваите ей значение. Для большинства переменных это именно так; для массивов и объектных переменных, однако, может использоваться несколько иной механизм.

Инициализация Массивов

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

При последовательном добавлении значений в массив вы просто записываете значения элементов массива, используя пустой индекс. Каждое последующее значение будет добавляться в качестве последнего элемента массива.

$names[] = "Jill";   // $names[0] = "Jill"
$names[] = "Jack";   // $names[1] = "Jack"
      

Как в C и Perl, элементы массива нумеруются начиная с 0, а не с 1.

Инициализация объектов

Для инициализации объектной переменной используйте новое предписание для сопоставления данного объекта объектной переменной.

class foo {
    function do_foo () { 
        echo "Doing foo."; 
    }
}

$bar = new foo;
$bar -> do_foo ();
      

Область Переменной

Областью переменной является контекст, внутри которого она определена. Главным образом, все переменные PHP имеют одну область. Однако, внутри функций определенных пользователем, представлена локальная область функции. Любая переменная, определенная внутри функции, по умолчанию ограничена локальной областью функции. Например:

 
$a = 1; /* глобальная область */ 

Function Test () { 
    echo $a; /* ссылка на переменную локальной области */ 
} 

Test ();
    

Этот скрипт не выдаст что-либо на выходе, поскольку инструкция echo относится к локальной версии переменной $a, значение которой присваивается не внутри этой области. Вы можете заметить, что здесь имеется некоторое отличие от языка C, в том что глобальные переменные в C автоматически действуют и внутри функций,   если только они не переписываются локальными определениями. Это может вызвать некоторые проблемы, т.к. по неосторожности можно изменить глобальную переменную. В PHP глобальные переменные должны быть продекларированы глобально внутри функции, если предполагается их использование в данной функции.  Например:

$a = 1;
$b = 2;

Function Sum () {
    global $a, $b;

    $b = $a + $b;
} 

Sum ();
echo $b;
    

Вышеописанный скрипт выдаст значение "3". Поскольку $a и $b декларируются глобально внутри функции, ссылки на данные переменные трактуются как ссылки на их глобальные версии. Нет ограничений на количество глобальных переменных, которыми можно манипулировать внутри функции.

Вторым способом доступа к переменным из глобальной области является использование специального опеределяемого PHP массива $GLOBALS. При этом предыдущий пример может быть записан как:

$a = 1;
$b = 2;

Function Sum () {
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 

Sum ();
echo $b;
    

Массив $GLOBALS является ассоциативным массивом, в котором имя глобальной переменной является ключом, а значение этой переменной является значением элемента массива.

Другой важной характеристикой от области определения переменной является  статическая переменная. Статическая переменная существует только в локальной области функции, но она не теряет своего значения когда программа, при исполнении, покидает эту область. Рассмотрим следующий пример:

Function Test () {
    $a = 0;
    echo $a;
    $a++;
}
    

Эта функция совершенно бесполезна практически, поскольку каждый раз при ее вызове она устанавливает $a в 0 и выводит "0".   Выражение $a++ , которое увеличивает значение переменной, так же бесполезно, поскольку при выходе из функции переменная $a исчезает. Для придания дееспособности функции подсчета, которая не теряла бы нить текущего счета, переменная $a декларируется как статическая:

Function Test () {
    static $a = 0;
    echo $a;
    $a++;
}
    

Теперь, каждый раз при вызове функции Test() она будет выводить значение $a и увеличивать его.

Статические переменные также весьма существенны, когда функции вызываются рекурсивно. Рекурсивные функции - это те, которые вызывают сами себя. Составлять рекурсивную функцию нужно внимательно, т.к. при неправильном написании можно сделать рекурсию неопределенной. Вы должны быть уверены в адекватности способа прекращения рекурсии. Следующая простая функция рекурсивно считает до 10:

Function Test () {
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        Test ();
    }
    $count--;
}
    

Изменяемые переменные

Иногда бывает удобно давать переменным изменяемые имена. Такие имена могут изменяться динамически. Обычная переменая устанавливается так:

$a = "hello";
    

Изменяемая переменная берет некое значение и обрабатывает его как имя переменной. В приведенном выше примере значение hello может быть использовано как имя переменной, посредством применения двух записанных подряд знаков доллара, т.е.:

$$a = "world";
    

С этой точки зрения, две переменных определены и сохранены в символьном дереве PHP: $a с содержимым "hello" и $hello с содержимым "world". Так, инструкция:

echo "$a ${$a}";
    

осуществляет то же самое, что и инструкция:

echo "$a $hello";
    

а именно, обе они выводят: hello world.

Чтобы использовать изменяемые переменные с массивами, необходимо решить проблему неоднозначности. Это означает, что если вы пишете $$a[1], то синтаксическому анализатору необходимо знать, имеете ли вы в виду использовать $a[1] как переменую, или вы предполагаете $$a  как переменную а [1] как индекс этой переменной. Синтаксис для разрешения подобной неоднозначности такой: ${$a[1]} для первого случая и ${$a}[1] для второго.

©Copi to всероссийский клуб вебмастеров


phpcell.webhost.ru > учебники, статьи, авторам, архив рассылки

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное