Доступ до переменных

dimagolov

Новичок
Renny, почитай документацию про фреймворку. там должно быть решение для конфига
 

dr-sm

Новичок
так штоле?

class Conf{
private static $foo = null;

static public function instance()
{
if (!self::$foo)
self::$foo = loadFoo();
return self::$foo;
}
}

class OtherClass {

public function bar() {
$omg = Conf::instance()['foo'];
}
}

аля зендфреймоворк вобшем
 

dimagolov

Новичок
dr-sm, только конструкция Conf::instance()['foo'] вроде как нифига в php не работает. или с 5.3 уже заработала?
 

dr-sm

Новичок
dimagolov, да, походу надо перелазить с плюсов,
имелось ввиду Conf::instance()->foo конечноже, тупанул )
 

Beavis

Banned
Автор оригинала: Smelo
Beavis
это стандартные возможности пхп и никакого отношения к говнокоду они не имеют
Я бы с удовольствием послушал про нестандартные возможности PHP, но щас речь не об этом.
$GLOBALS в большинстве случаев имеет прямое отношение к говнокоду, и делает практически невозможным отследить поток данных в скрипте.
 

pilot911

Новичок
если проект небольшой - то $GLOBALS решает

-~{}~ 06.09.09 22:58:

Автор оригинала: Beavis
Я бы с удовольствием послушал про нестандартные возможности PHP, но щас речь не об этом.
$GLOBALS в большинстве случаев имеет прямое отношение к говнокоду, и делает практически невозможным отследить поток данных в скрипте.
глупости, сколько раз убеждался на своем опыте

никто не помешает точно также НЕ отследить поток данных в скрипте при использовании Регистри и тп
 

tf

крылья рулят
PHP:
public static function get() {
    self::init();
    return self::$value[$id];
}
 

SiZE

Новичок
PHP:
// config.php
$cfg['foo'] = 'fook';
$cfg['bar'] = 'bark';

// script.php

class myClass {
  var $cfg;
  function __construct () {
     global $cfg;
     $this->cfg = $cfg;
     unset ($cfg);
  }
}

или

class myClass {
  var $cfg;
}

$mc = new MyClass;
$mc->cfg = $cfg;

или

class myClass {
  function __construct () {
    global $cfg;
    if (is_array ($cfg) && sizeof ($cfg)) {
      foreach($cfg as $k => $v) {
         $this->$k = $v;
      }
    }
  }
}
 

FractalizeR

Новичок
Автор оригинала: DiMA
> и делать в нем статические свойства совсем не хочется

а придется
Думаю, нужно сделать класс конфига - синглтоном. Это решит большинство проблем. Все же статический класс - не слишком красиво. В конструкторе синглтона можно загружать начальные значения переменных откуда нужно.

это стандартные возможности пхп и никакого отношения к говнокоду они не имеют
Имеют. Доступ из класса к глобальным переменным - это плохо. Почему - см. тут: http://en.wikipedia.org/wiki/Global_variable
 

Beavis

Banned
Автор оригинала: pilot911
никто не помешает точно также НЕ отследить поток данных в скрипте при использовании Регистри и тп
при использовании registry все присвоения проходят через один метод класса Регистри, и откуда появляется присваиваемое значение отследить элементарно, добавив немного вывода дебага в класс
 

Renny

Новичок
Всем спасибо, пришлось делать через статический класс.
Я бы еще с удовольствием посмотрел вариант с синглотоном, тк я паттерны плохо знаю ).
 

pilot911

Новичок
Автор оригинала: Beavis
при использовании registry все присвоения проходят через один метод класса Регистри, и откуда появляется присваиваемое значение отследить элементарно, добавив немного вывода дебага в класс
c этим не поспоришь, к тому же я сделал заметку - для небольших проектов глобал подойдет
 

Alexandre

PHPПенсионер
Я бы еще с удовольствием посмотрел вариант с синглотоном, тк я паттерны плохо знаю )
синглентон - тот же статический класс, только вид сбоку: обозван синглетоном и имеет метод getInstance() для получения экземпляра класса.
Еще в синглентоне делается приватный конструктор, чтоб класс нельзя было вызывать как неСтатический.
в остальнов все то же...
ИМХО я бы еще в синглентоне указал final
чтоб нельзя было от него наследовать. Но - это сейчас начнется холливар...
 

cDLEON

Онанист РНРСlub
PHP:
<?php
class globalsHandler extends ArrayObject{
	public function offsetGet ($offset) {
		var_dump(debug_backtrace());
		return parent :: offsetGet($offset);
	}
	public function offsetSet($offset,$newVal) {
		var_dump(debug_backtrace());
		return parent :: offsetSet($offset,$newVal);
	}
}
$test="blabla";
$tes2="blabla";
var_dump($GLOBALS);
$GLOBALS=new globalsHandler();
$GLOBALS['test']="asd";
$test="blabla";
$tes2="blabla";
function test() {
	global $test;
	var_dump($GLOBALS['test']);
	var_dump($test);
}
var_dump($GLOBALS);
test();
Очень, кстати, интересное поведение))
 
Сверху