БлогNot. PHP: используем статическую переменную класса и динамически формируем имя переме...

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 [9082 просмотра]


теги: программирование php

К этой статье пока нет комментариев, Ваш будет первым