Вставка перемнных в подключаемую функцию

  • Автор темы finogeev
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.
F

finogeev

Прохожие
Что то я совсем уже схожу с ума ...
Поскажите, ситуация такая.
В php файл инклюдятся два файла, один с переменными (типа конфига), а другой с пользовательскими функциями, которые используют переменные из первого файла.

как мне правильно сделать. В файле с функциями инклюдить нельзя, а постоянно передвать параметры при вызове финкции, типа

UserFunc ($var1, $var2);

как то не хочеться и слишком открыто
 
1ый файл
Код:
$db_name = 'aaa';
$db_user = 'dsadas';
2ой
Код:
function connect()
{
  global $db_name, $db_user;
}

3их инклудит оба
 
АААA! Глобалы в современном коде... Народ так делать ненужно!!!
Данная проблема решается с томощью ООП (Объектно Ориентированого Программирования)
При инстансе класса просто передаем ему необходимые параметры через конструктор или с помощью сеттеров:
Пример:
PHP:
<?
class Foo
{
	var $_bar;
	// Это конструктор для PHP4, работает и в пятерке
	function Foo($bar=null)
	{
		$this->_bar=$bar;
	}
	// Это сеттер 
	function setBar($bar)
	{
		$this->_bar=$bar;
	}
}
// использование 
$fooObject = new Foo(); //тут получим пустую $this->_bar
$fooObject->setBar("Zoo"); // тут получим $this->_bar = "Zoo"
// того же результата можно достич передав Zoo в конструктор - делается это так
$fooObject = new Foo("Zoo");
?>
Возможен другой вариант используем паттерн Singletone, но это уже несколько другая история.
p.s. Кстати если во втором инклюде только функции - он легко превращается в клас Functions если в начале дописать class Functions { и в конце }
И вызов функций будет происходить так
PHP:
$functionsObject = new Functions();
$result = $functionsObject->название_функции(ее_параметры);
p.s. Про паттерны типа Singletone можно почитать здесь
p.p.s. Кстати если нужен правильный пример Singleton`а заказывайте. В php4 есть маленький баг который нужно знать как обходит ь, чтобы не создавались копии синглтонов.
 
Интересный вариант привел Jameson, толко это не синглтон, а скорее фабрика синглтонов. Точнее это похоже на паттерн Registry.
Тем не менее, приведенный код решает ту проблему о которой я говорил. Конкретно php4, не позволяет в статическом методе возвращать по ссылке объект, он возвращает копию - это может привести к неприятным сюрпризам :(
Мой вариант синглтона, с передачей параметров. Применение ему может быть разное, но лично я, в основном, использую его для конфигурации приложения.
PHP:
<?
class OurSingletone
{
    var $_config = null;
 /**                                                        
     * &getInstance - получить синглтон, один на весь проект, при первом вызове необходимо передать параметр
     *
     * @static
     * @param string $config - наш абстрактный параметр
     * @access public
     * @return OurSingletone
     */
    function &getInstance($config = null) {
        static $instance = null;
        if ( is_null($instance) ) {
            $instance = array();
            $instance[0] = &new OurSingletone($config);
        }
        return $instance[0];
    }
    function OurSingletone($config)
    {
		$this->_config=$config;
    }
	/*
	Использование:
	первый раз передаем необходимые параметры
	*/
	$singletone=&OurSingletone::GetInstance ('что-то наше');
	/*
	второй раз получаем тот же объект  но не используем параметр
	*/
	$singletone=&OurSingletone::GetInstance();
}	
?>
p.s. Маленькое предупреждение, в проекте обычно требуется один-два синглтона, если у вас получается их больше скорее всего имеет место ошибка проектирования, конечно если проект не слишком большой.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху