Forum Webscript.Ru

Программирование => PHP => Тема начата: Alexandr от 26 Июля 2002, 14:41:05

Название: GLOBALS & class\'ы
Отправлено: Alexandr от 26 Июля 2002, 14:41:05
Ребята (и девчата), как в классах использовать глобальные переменные?
пишу
class Template {
var $m_rootDir=$GLOBALS[\'DOCUMENT_ROOT\']."/tpl";
.......

Пишет:
Parse error: parse error in d:\\web\\work\\lib\\template.phl on line 3
Fatal error: Cannot instantiate non-existent class: template in d:\\web\\work\\board.php on line 70

Пишу
class Template {
global $DOCUMENT_ROOT;
var $m_rootDir=$DOCUMENT_ROOT.".";

Пишет:
Parse error: parse error, expecting `T_OLD_FUNCTION\' or `T_FUNCTION\' or `T_VAR\' or `\'}\'\' in d:\\web\\work\\lib\\template.phl on line 3
Fatal error: Cannot instantiate non-existent class: template in d:\\web\\work\\board.php on line 70


Что делать???
Название: GLOBALS & class\'ы
Отправлено: ThE0ReTiC от 26 Июля 2002, 15:22:10

class Template
{
var $m_rootDir = \'\';

function Template($szRootDir = \'\')
{
GLOBAL $HTTP_SERVER_VARS;

if(empty($szRootDir))
{
$this->m_rootDir = $HTTP_SERVER_VARS["DOCUMENT_ROOT"];
}
else
{
$this->m_rootDir = $szRootDir;
}
}
...
} // }} class

+ еще 999 способов решить эту проблему.
Название: GLOBALS & class\'ы
Отправлено: Alexandr от 26 Июля 2002, 15:41:14
Точно!!!
Чёт ступил малость.
Название: GLOBALS & class\'ы
Отправлено: GotZfild от 26 Июля 2002, 15:41:33
В случае с DOCUMENT_ROOT вообще можно не глобализовать, а использовать getenv(\'DOCUMENT_ROOT\')
Название: GLOBALS & class\'ы
Отправлено: ThE0ReTiC от 26 Июля 2002, 15:47:41
GotZfild
Ага, а еще можно  использовать $_SERVER - который уже глобализован.
Про количество способов я уже писал
:)
Название: GLOBALS & class\'ы
Отправлено: Alexandr от 26 Июля 2002, 15:59:13
Цитировать
использовать getenv(\'DOCUMENT_ROOT\')

Пробовал
var $m_rootDir=getenv(\'DOCUMENT_ROOT\')."/tpl";
Не получилось.

Ну я уже всё решил пасибо всем.

class Template {
function Template ($dir="") {
global $DOCUMENT_ROOT;
if ($dir=="") $dir=$DOCUMENT_ROOT."templates/";


Цитировать
Про количество способов я уже писал

Точно!
Просто, что-то поленился малость.
Название: GLOBALS & class\'ы
Отправлено: Tankist от 26 Июля 2002, 17:06:06
Цитировать
$_SERVER

PHP 4.1.0 и выше
Хотя у всех уже давным давно стоит 4.2.1
Название: GLOBALS & class\'ы
Отправлено: Alexandr от 29 Июля 2002, 09:32:45
Цитировать
Хотя у всех уже давным давно стоит 4.2.1

Он дырявый.
Название: GLOBALS & class\'ы
Отправлено: Maniac от 29 Июля 2002, 10:29:59
Цитировать
if ($dir=="") $dir=$DOCUMENT_ROOT."templates/";

Кстати, по ходу у тебя в этом месте ошибка. Ты уверен, что тут не $this->dir должно стоять?

З.Ы. Уж сколько раз твердили миру - члены класса должны инициализироваться в конструкторе
Название: GLOBALS & class\'ы
Отправлено: Alexandr от 29 Июля 2002, 10:34:58
Цитировать
Ты уверен, что тут не $this->dir должно стоять?

А что это меняет? ..... написал что попало... работает.... кул.....
Название: GLOBALS & class\'ы
Отправлено: Maniac от 29 Июля 2002, 10:38:16
Цитировать
написал что попало... работает.... кул.....

Ээээ.... Ты, случаем, в разработке маздаев не участвовал? ;)

А я это к тому, что если у тебя $dir - это член класса ( в исходном примере он, кажись, $m_rootDir назывался), то нифига ты его не проинициализируешь
Название: GLOBALS & class\'ы
Отправлено: Alexandr от 29 Июля 2002, 10:49:42
Цитировать
Ээээ.... Ты, случаем, в разработке маздаев не участвовал?

[off]
Да так прикалываюсь....  Настроение хреновое:
сижу на работе, жара жуткая, похмелье легкое......
Да не плохо погуляли в ночь с пятницы на понедельник.....
[/off]
Цитировать
то нифига ты его не проинициализируешь

Да фиг знает. Я класс Бритвы взял. Работает. А в тонкости переинициализации переменных не вдавался....