PHP: используем статическую переменную класса и динамически формируем имя переменной класса
С целью решения поставленных в заголовке задач напишем небольшой класс на PHP с именем democlass
.
В этом классе опишем приватную переменную $var
, а также статический (общий для всех экземпляров класса) элемент $count
. С его помощью мы будем считать количество созданных экземпляров класса - значение $count
будет увеличиваться на 1 в конструкторе __construct
и уменьшается на 1 в деструкторе __destruct
. Также конструктор может инициализировать переменную $var
, если ему передан ненулевой аргумент. Листинг демо-класса:
<?php class democlass { private $var=0; static public $count=0; function __construct ($var=0) { $this->var = $var; democlass::$count++; } function __destruct() { democlass::$count--; } function view () { $numargs = func_num_args(); $arglist = func_get_args(); echo '<br>'; for ($i = 0; $i < $numargs; $i++) { $var = $arglist[$i]; echo '$'.$var.'='.$this->var.' '; } } } ?>
Про функцию view
нужно сказать несколько слов отдельно - она умеет принимать переменное число аргументов, которые должны быть именами переменных класса без предшествующего "$
" (у нас в классе всего одна нестатическая переменная, поэтому при тестовом вызове функции мы можем, например, напечатать значение $var
дважды) и печатать с новой строки нужные переменные класса в виде имя=значение
. Это может пригодиться при анализе и отладке классов на PHP.
Теперь напишем скрипт, использующий наш демо-класс и показывающий создание, удаление и просмотр объектов:
<?php require_once 'democlass.php'; $c1 = new democlass(); $c2 = new democlass(1); echo '2 objects created, $count='.democlass::$count; $c2->__destruct(); echo '<br>1 object deleted, $count='.democlass::$count; $c1->view ('var'); $c2->view ('var','var'); ?>
Вообще-то PHP не нуждается в явных вызовах деструкторов, а объекты "живут" до конца выполнения скрипта, поэтому после явного вызова деструктора для объекта $c2
$c2->__destruct();
значение $count
уменьшится, но объект прекрасно будет существовать, что видно из последующего вызова $c2->view
.
Вот результаты выполнения скрипта:
2 objects created, $count=2 1 object deleted, $count=1 $var=0 $var=1 $var=1
19.03.2013, 13:03 [9134 просмотра]