Я бы с удовольствием послушал про нестандартные возможности PHP, но щас речь не об этом.Автор оригинала: Smelo
Beavis
это стандартные возможности пхп и никакого отношения к говнокоду они не имеют
глупости, сколько раз убеждался на своем опытеАвтор оригинала: Beavis
Я бы с удовольствием послушал про нестандартные возможности PHP, но щас речь не об этом.
$GLOBALS в большинстве случаев имеет прямое отношение к говнокоду, и делает практически невозможным отследить поток данных в скрипте.
// 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;
}
}
}
}
Думаю, нужно сделать класс конфига - синглтоном. Это решит большинство проблем. Все же статический класс - не слишком красиво. В конструкторе синглтона можно загружать начальные значения переменных откуда нужно.Автор оригинала: DiMA
> и делать в нем статические свойства совсем не хочется
а придется
Имеют. Доступ из класса к глобальным переменным - это плохо. Почему - см. тут: http://en.wikipedia.org/wiki/Global_variableэто стандартные возможности пхп и никакого отношения к говнокоду они не имеют
при использовании registry все присвоения проходят через один метод класса Регистри, и откуда появляется присваиваемое значение отследить элементарно, добавив немного вывода дебага в классАвтор оригинала: pilot911
никто не помешает точно также НЕ отследить поток данных в скрипте при использовании Регистри и тп
Просто загляните в гугл:Автор оригинала: Renny
Всем спасибо, пришлось делать через статический класс.
Я бы еще с удовольствием посмотрел вариант с синглотоном, тк я паттерны плохо знаю ).
c этим не поспоришь, к тому же я сделал заметку - для небольших проектов глобал подойдетАвтор оригинала: Beavis
при использовании registry все присвоения проходят через один метод класса Регистри, и откуда появляется присваиваемое значение отследить элементарно, добавив немного вывода дебага в класс
синглентон - тот же статический класс, только вид сбоку: обозван синглетоном и имеет метод getInstance() для получения экземпляра класса.Я бы еще с удовольствием посмотрел вариант с синглотоном, тк я паттерны плохо знаю )
<?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();