Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Классы в PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Eazy-E
Отправлено: 05 Октября, 2011 - 15:40:44
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Здравствуйте уважаемы форумчане! Пытаюсь научиться ООП, пишу класс шаблонизатора.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class BuildTemplate
  3. {
  4. var $template;
  5.  
  6.         function LoadTpl(){
  7.         $tpl = file_get_contents (ROOT_DIR . '/theme/main.tpl');
  8.         require_once CORE_DIR . '/settings/site.php';
  9.         }
  10.         function ParseTpl(){
  11.         $tpl = str_replace ('{header}', $header, $tpl);
  12.         print $tpl;
  13.         }
  14.        
  15. }
  16.  
  17. BuildTemplate::LoadTpl();
  18. BuildTemplate::ParseTpl();
  19. ?>


Вот эта хрень не работает! =( Люди добрые, объясните идиоту! Где ошибка?! В самом начале класса объявлен объект template, как его использовать в моем примере?! Простите за тупые вопросы, не могу понять что к чему... спасибо за помощь!


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
LIME
Отправлено: 05 Октября, 2011 - 16:12:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Eazy-E пишет:
BuildTemplate::LoadTpl();
BuildTemplate::ParseTpl();
так обращаются к статическим методам (в контексте класса)
BuildTemplate->LoadTpl();
BuildTemplate->ParseTpl();
 
 Top
OrmaJever Модератор
Отправлено: 05 Октября, 2011 - 16:19:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




LIME только вначале нужно создать обьект.
Eazy-E вам бы прочитать всё сначала http://php.su/learnphp/phpoo/


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Eazy-E
Отправлено: 05 Октября, 2011 - 16:26:53
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $obj = new BuildTemplate;
  2. BuildTemplate->LoadTpl();
  3. BuildTemplate->ParseTpl();


Пробовал я вот так, ничего не вышло. Как обычно пустое окно.. Читал я про ооп, не могу понять.. Объясните на моем примере пожалуйста, думаю только так до меня дойдет Огорчение Как в моем случае использовать объект $template, и нужно ли? Заранее спасибо


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
OrmaJever Модератор
Отправлено: 05 Октября, 2011 - 16:28:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




PHP:
скопировать код в буфер обмена
  1. $obj = new BuildTemplate;
  2. $obj->LoadTpl();
  3. $obj->ParseTpl();


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Eazy-E
Отправлено: 05 Октября, 2011 - 16:36:02
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




OrmaJever пишет:
$obj = new BuildTemplate;
$obj->LoadTpl();
$obj->ParseTpl();


Извинияюсь, вот это я и хотел написать.. Ладно, бог с ним.. Сам попробую докопаться.


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
caballero
Отправлено: 05 Октября, 2011 - 16:56:46
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




А что будет если ктото вызовет сначала parse?

впрочем код и так не рабочий
переменная $tpl в метода parse никак не связана с переменной в методе load


function ParseTpl(){
$tpl = $this->LoadTpl()
$tpl = str_replace ('{header}', $header, $tpl);
print $tpl;
}

либо переменную обявить членом класса
тогда

<?PHP
class BuildTemplate
{
private $tpl;

function LoadTpl(){
$this->tpl = file_get_contents (ROOT_DIR . '/theme/main.tpl');
require_once CORE_DIR . '/settings/site.php';
}
function ParseTpl(){
$this->tpl = str_replace ('{header}', $header, $this->tpl);
print $this->tpl;
}

}

BuildTemplate::LoadTpl();
BuildTemplate::ParseTpl();
?>

(Отредактировано автором: 05 Октября, 2011 - 16:57:19)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Eazy-E
Отправлено: 05 Октября, 2011 - 18:44:12
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Да уж, не думал что проблема окажется столь серьезной.. caballero, увы ничего не работает.. Я в принципе и сам догадывался, что в методе Parse нужно обратиться к методу Load.. но как?! Вот в чем вопрос. Стоит заметить, что если преобразовать эти две функции в одну (LoadTpl), то все работает на ура. Только мне от такого метода толку - ноль. Будут ли еще предложения?

Edit:

caballero, во втором листинге вылазит ошибка:

Цитата:
Fatal error: Using $this when not in object context in .... on line 7

(Отредактировано автором: 05 Октября, 2011 - 18:48:29)



-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
caballero
Отправлено: 05 Октября, 2011 - 19:14:14
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




наверно как статику вызываете
BuildTemplate::LoadTpl();
BuildTemplate::ParseTpl();

вызывайте как методы объекта

$obj = new BuildTemplate;
$obj->LoadTpl();
$obj->ParseTpl();


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Eazy-E
Отправлено: 05 Октября, 2011 - 19:35:44
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Пробовал, не помогает.. Где ошибка, понять не могу..


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
caballero
Отправлено: 05 Октября, 2011 - 19:47:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




скопируйте строку где ошибка


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Eazy-E
Отправлено: 05 Октября, 2011 - 19:56:14
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Выводит пустое окно в браузере. Экранирование ошибок включено. В чем может быть проблема?


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
Bio man
Отправлено: 05 Октября, 2011 - 20:17:26
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




сперва отладь каждый член, каждую переменную var_dump()'ом. тогда станет понятней где что не так
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class BuildTemplate
  3. {
  4. private $tpl;
  5.  
  6. function LoadTpl(){
  7. $this->tpl = file_get_contents (ROOT_DIR . '/theme/main.tpl');
  8. echo '<pre>';
  9. var_dump($this->tpl);
  10. echo '</pre>';
  11. require_once CORE_DIR . '/settings/site.php';
  12. }
  13. function ParseTpl(){
  14. $this->tpl = str_replace ('{header}', $header, $this->tpl);
  15. echo '<pre>';
  16. var_dump($this->tpl);
  17. var_dump($header);
  18. echo '</pre>';
  19. print $this->tpl;
  20. }
  21.  
  22. }
  23. $tpl = new BuildTemplate();
  24. $tpl->LoadTpl();
  25. $tpl->ParseTpl();
  26. echo '<pre>';
  27. var_dump($tpl);
  28. echo '</pre>';
  29. ?>

как то так

(Отредактировано автором: 05 Октября, 2011 - 20:22:52)

 
 Top
Eazy-E
Отправлено: 05 Октября, 2011 - 20:27:46
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




да тут и без отладки все ясно было Улыбка

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. string(8) "{header}" //Из метода LoadTpl
  3. string(0) "" //Из метода ParseTpl
  4.  


Что говорит о том, что значение не передается...

Главный вопрос - как передать значение переменной из первого метода второму? Собственно и все.
(Добавление)
Bio man, тоже самое вашим методом:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. string(8) "{header}"
  3.  
  4. string(0) ""
  5. NULL
  6.  
  7. object(BuildTemplate)#1 (1) {
  8.  ["tpl":"BuildTemplate":private]=>
  9.   string(0) ""
  10. }
  11.  


Нифига не пойму, куда пропадает значение?!


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
Bio man
Отправлено: 05 Октября, 2011 - 20:31:34
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Eazy-E пишет:
да тут и без отладки все ясно было Улыбка

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. string(8) "{header}" //Из метода LoadTpl
  3. string(0) "" //Из метода ParseTpl
  4.  


Что говорит о том, что значение не передается...

Главный вопрос - как передать значение переменной из первого метода второму? Собственно и все.
какую переменную? $tpl?
(Добавление)
файл шаблона кинь
(Добавление)
откуда $heder берешь? если он вне класса то нужно его передать методу либо написать global $header если он вне класса
(Добавление)
походу ясно в чем проблема. {header} заменяется пустой строкой так как $header не обьявлена
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB