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

Renny

Новичок
Доступ до переменных

Мне надо что бы работал следующий код

PHP:
$foo='fook';

class Myclass{
  public $bar='bark';

  public function inside()
  {
     echo $this->$bar;
     echo $foo;  
  }

}
То есть суть вопроса в том, как находясь в методе класса, получить доступ до переменных которые определены вне класса.
 

Adelf

Administrator
Команда форума
Сделать так можно, прочитав про глобальные переменные. Вот только не нужно. Надо переделать так, чтобы это не понадобилось.
 

Renny

Новичок
Вот в том и дело мне нужен глобальный конфиг доступный для всех классов. Создавать отдельный объект и делать в нем статические свойства совсем не хочется.

PS все должно работать в php 5.3
 

DiMA

php.spb.ru
Команда форума
> и делать в нем статические свойства совсем не хочется

а придется
 

Beavis

Banned
Smelo
ты думаешь ты помог, посоветовав человеку написать говнокод?
 

DiMA

php.spb.ru
Команда форума
Beavis

эх, хотел написать сразу, да думал не стоит... ок, пишу:


> и делать в нем статические свойства совсем не хочется

а придется

остальные варианты - получится говнокодисто
 

Renny

Новичок
Даааа, веселая ситуация, ООП ради ООП.

Мне теперь что бы получить доступ до конфиг данных придется писать класс в нем статическую переменную, которая массив.
И потом придется все равно создать объект этого класса, что бы он дернул данные из файла конфигурации и при инициализации установил эти самые конфиг значения.

Бред чистой воды (((( вот пример
PHP:
class Conf{
  public static $foo = array();

  public function __consruct()
  {
    self::$foo = array('url'=>'google.com', 'extra'=> 'some val');    
  }
}

$obj = new Conf();


class OtherClass{

  public function action()
  {        

    echo Conf::$foo['url']."<hr />";

  }

}
-~{}~ 06.09.09 16:21:

Есть метод попроще?
 

Smelo

Новичок
Beavis
это стандартные возможности пхп и никакого отношения к говнокоду они не имеют
Renny
у тебя задача неправильная
для начала нужно понять - зачем тебе дёргать внешние переменные
 

Renny

Новичок
Затем что должны быть доступны без плясок с бубном в любом месте моего приложения ) А классов там много.
 

Smelo

Новичок
если это конфиг, то он скорее всего хранится в отдельном файле ввиде массива
тогда остаётся только написать "класс загрузчик" этих конфигов
 

DiMA

php.spb.ru
Команда форума
> Бред чистой воды (((( вот пример

Бред у тебя! Конструктор с конфига ВЫКИНИ. Класс статический, его никто и не думает вызывать (кроме тебя, конечно, с твоим не понимаем ООП). $obj не нужен.
 

Smelo

Новичок
Renny
$GLOBALS или статичный класс тебя спасут

-~{}~ 06.09.09 16:46:

class Conf{
public static $foo = array('url'=>'google.com', 'extra'=> 'some val');
}
 

Renny

Новичок
Вот только дело в том что на момент написания класса значения переменных еще НЕ ИЗВЕСТНЫ, их надо дернуть с файла конфигурации!!!!!! поэтому нужна инициализация что бы заполнить значения статической переменной.
 

Renny

Новичок
В момент инициализации мы читаем файл конфигурации и заполняем значения переменных.

Может я просто не знаю что такое статический класс?
Я знаю статические методы и статические свойства. Статический класс добавили в php 5.3? Тогда тыкните где прочесть.

-~{}~ 06.09.09 16:53:

Я так понимаю вы предлагаете создать статический метод, и через него уже инициализировать значения статических переменных?

-~{}~ 06.09.09 16:54:

Но ведь тогда все равно придется вызывать этот статический метод.

-~{}~ 06.09.09 16:57:

PHP:
class Conf{
  public static $foo = array();

  static public function init()
  {
     include_once("somefile.php");
     self::$foo = $some_file_array;    
  }
}

Conf::init();


class OtherClass{

  public function action()
  {        

    echo Conf::$foo['url']."<hr />";

  }

}
 

DiMA

php.spb.ru
Команда форума
Зачем делать скрипт пустышку somefile.php? Размести его содержимое сразу внутри самого класса Conf.
 

Renny

Новичок
Объясняю как я это понимаю, пока не вызван статический метод класса init(), статическая переменная Conf::$foo['url'] пустая.
 

DiMA

php.spb.ru
Команда форума
в этом примере конструктор не нужен

class Conf{
public static $foo = array();

public function __consruct()
{
self::$foo = array('url'=>'google.com', 'extra'=> 'some val');
}
}


в этом - нужен

class Conf{
public static $foo = array();

static public function init()
{
include_once("somefile.php");
self::$foo = $some_file_array;
}
}
 

Renny

Новичок
Да не могу я этого сделать, я фреймворк чужой использую, надо сделать по минимуму модификаций внутри самого фреймворка.
 
Сверху