ООП и ссылки в PHP4

T. Anre

Новичок
ООП и ссылки в PHP4

PHP:
<?php

// файл xsf.php
// комментарии JavaDoc

/**
* Диспетчер объектов
*/
class xsf {
	/**
	* Регистрация нового объекта
	*
	* @access public
	* @return mixed
	*/
	function &set_object($str_obj_name=NULL) {
		if ( strlen($str_obj_name) ) {
			if ( !isset($GLOBALS['object_space']) OR !is_array($GLOBALS['object_space']) ) {
				$GLOBALS['object_space'] = array();
			}
			$obj = &$GLOBALS['object_space'];
			$obj[$str_obj_name] = &new $str_obj_name;
			$methods = get_class_methods($str_obj_name);
			if (in_array('start',$methods)) {
				$obj[$str_obj_name]->start();
			}
			return $obj[$str_obj_name];
		}
		else {
			return false;
		}
	}
	/**
	* Получить "ссылку" на объект( в данном случае ссылка не объектная)
	*
	* @access public
	* @return mixed
	*/
	function &get_object($str_obj_name=null) {
		$obj = &$GLOBALS['object_space'];
		if ( strlen($str_obj_name) ) {
			if ( is_object($obj[$str_obj_name]) ) {
				return $obj[$str_obj_name];
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	/**
	* Получить список инициализированных объектов
	*
	* @access public
	* @return array
	*/
	function &get_objects_list() {
		$obj_list = array();
		if ( isset($GLOBALS['object_space']) AND is_array($GLOBALS['object_space']) ) {
			foreach ($GLOBALS['object_space'] AS $key=>$value) {
				array_push($obj_list,$key);
			}
		}
		return $obj_list;
	}
}
?>
Недавно написал небольшой класс-диспетчер для РНР4.
Но механизм работы кажется сомнительным.
Вот небольшой пример показывающий работу данного класса.
PHP:
<?php
require('xsf.php');
class A extends xsf {
	/**
	* Constructor of class A
	*/
	function start() {
		echo "A started";
		$this->x = 'variable A';
	}
	function get() {
		$b = &$this->get_object('B');
		echo $b->x;
	}
}
class B extends xsf {
	/**
	* Constructor of class B
	*/
	function start() {
		echo "B started";
		$this->x = 'variable B';
	}
	function get() {
		$a = &$this->get_object('A');
		echo $a->x;
	}
}

$xsf = &xsf::set_object('xsf');
$A = &$xsf->set_object('A');
$B = &$xsf->set_object('B');

$A->get();
$B->get();
?>
Интересует следующее:
1. Есть ли здесь утечки памяти?
3. Правильно ли работает механизм ссылок?
 
Сверху