Forum Webscript.Ru
		Программирование => PHP => Тема начата: 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
 
 
 Что делать???
- 
				
 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 способов решить эту проблему.
- 
				Точно!!!
 Чёт ступил малость.
- 
				В случае с DOCUMENT_ROOT вообще можно не глобализовать, а использовать getenv(\'DOCUMENT_ROOT\')
			
- 
				GotZfild 
 Ага, а еще можно  использовать $_SERVER - который уже глобализован.
 Про количество способов я уже писал
 :)
- 
				использовать getenv(\'DOCUMENT_ROOT\') 
 Пробовал
 var $m_rootDir=getenv(\'DOCUMENT_ROOT\')."/tpl";
 Не получилось.
 
 Ну я уже всё решил пасибо всем.
 
 class Template {
 function Template ($dir="") {
 global $DOCUMENT_ROOT;
 if ($dir=="") $dir=$DOCUMENT_ROOT."templates/";
 
 
 Про количество способов я уже писал 
 Точно!
 Просто, что-то поленился малость.
- 
				$_SERVER 
 PHP 4.1.0 и выше
 Хотя у всех уже давным давно стоит 4.2.1
- 
				Хотя у всех уже давным давно стоит 4.2.1 
 Он дырявый.
- 
				if ($dir=="") $dir=$DOCUMENT_ROOT."templates/"; 
 Кстати, по ходу у тебя в этом месте ошибка. Ты уверен, что тут не $this->dir должно стоять?
 
 З.Ы. Уж сколько раз твердили миру - члены класса должны инициализироваться в конструкторе
- 
				Ты уверен, что тут не $this->dir должно стоять? 
 А что это меняет? ..... написал что попало... работает.... кул.....
- 
				написал что попало... работает.... кул..... 
 Ээээ.... Ты, случаем, в разработке маздаев не участвовал? ;)
 
 А я это к тому, что если у тебя $dir - это член класса ( в исходном примере он, кажись, $m_rootDir назывался), то нифига ты его не проинициализируешь
- 
				Ээээ.... Ты, случаем, в разработке маздаев не участвовал? 
 [off]
 Да так прикалываюсь....  Настроение хреновое:
 сижу на работе, жара жуткая, похмелье легкое......
 Да не плохо погуляли в ночь с пятницы на понедельник.....
 [/off]
 то нифига ты его не проинициализируешь 
 Да фиг знает. Я класс Бритвы взял. Работает. А в тонкости переинициализации переменных не вдавался....