Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Fatal error: Call to undefined method index::as....
 
 автор: globus   (24.05.2007 в 14:19)   письмо автору
 
 

function __construct()
{
SQL::__construct();
$this->UserAut=users::__construct();
Smarty::Smarty();
Smarty::assign('d','a');

self::CaseModules();
}



Так вот мне на это выдают что

Fatal error: Call to undefined method index::assign() in templateclass\smarty.class.php on line 570

Почему такое происходит,если в классе smarty эта функция прописана

   
 
 автор: Trianon   (24.05.2007 в 14:25)   письмо автору
 
   для: globus   (24.05.2007 в 14:19)
 

метод assign не определен в классе index

   
 
 автор: globus   (24.05.2007 в 14:32)   письмо автору
 
   для: Trianon   (24.05.2007 в 14:25)
 

НЕт зачем он мне в классе index это в классе smarty который и вызывается.НО

В классе smarty есть конструктор,который обращяется к методу того же smarty,через $this->assign

Это и вызывает ошибку,несмотря на то что метод assign определен и работает но почему то не пожет быть вызван!Я думаю потому что это проиходит из другого класса?Если да то что мне делать.

   
 
 автор: Andre   (24.05.2007 в 14:45)   письмо автору
 
   для: globus   (24.05.2007 в 14:32)
 

Для того, чтобы обратиться к методам класса Smarty, которые содержат вызов других методов, необходимо создать объект класса Smarty, либо же унаследовать Ваш класс index от класса Smarty.

   
 
 автор: globus   (24.05.2007 в 15:17)   письмо автору
 
   для: Andre   (24.05.2007 в 14:45)
 

поподробней можно...

   
 
 автор: Andre   (24.05.2007 в 15:24)   письмо автору
 
   для: globus   (24.05.2007 в 15:17)
 

То есть у Вас происходит обращение к методам класса Smarty используя его как пространства имен. Для того, чтобы использовать его как класс, необходимо создать его объект $smarty = new Smarty;. После этого уже обращаться к методу assign() следующим образом: $smarty->assign('d','a');.

   
 
 автор: globus   (24.05.2007 в 15:26)   письмо автору
 
   для: Andre   (24.05.2007 в 15:24)
 

А если обращение происходит из совершенно другого класса,как тогда быть
Класс рекйрится из главного где я обьявлю смарти.

   
 
 автор: Andre   (24.05.2007 в 15:42)   письмо автору
 
   для: globus   (24.05.2007 в 15:26)
 


Smarty::Smarty();
Smarty::assign('d','a');

Конкретно для этого случая следует сделать следющее:

$smarty = new Smarty();
$smarty->assign('d','a');

Предварительно должен быть подключен файл с классом Smarty.

   
 
 автор: globus   (24.05.2007 в 15:44)   письмо автору
 
   для: Andre   (24.05.2007 в 15:42)
 

Это имхо как то не так потому что тоже самое происходит в главном классе,а повторять зачем?Других способов нету.

   
 
 автор: Andre   (24.05.2007 в 15:49)   письмо автору
 
   для: globus   (24.05.2007 в 15:44)
 

Если у Вас уже создан объект класса Smarty, то можно обратиться сразу к методу assign('a','b');:

$smartyObject->assign('a','b');

где $smartyObject - объект класса Smarty.

   
 
 автор: globus   (24.05.2007 в 16:01)   письмо автору
 
   для: Andre   (24.05.2007 в 15:49)
 

Ммм.Понимаете класс smarty был обьявлен в главном классе он же определяет в зависимости он URL что подключать,вот они используют смарти,как тогда обратится.Тоесть как мне обратится к переменной главного класса из вызываемого

   
 
 автор: Andre   (24.05.2007 в 16:20)   письмо автору
 
   для: globus   (24.05.2007 в 16:01)
 

Все также, как и выше написано. То есть, если у Вас класс index является потомком класса Smarty, а Вы желаете обратиться конкретно к методу класса Smarty в классе index, то следует создать объект класса Smarty, а уже потом обращаться к методам последнего через созданный объект.

   
 
 автор: globus   (24.05.2007 в 16:25)   письмо автору
 
   для: Andre   (24.05.2007 в 16:20)
 

Как я к нему обращюсь,если подкл.класс не является потомком главного класа а всеволишь вызывается из него

   
 
 автор: Andre   (24.05.2007 в 16:31)   письмо автору
 
   для: globus   (24.05.2007 в 16:25)
 

Значит поподробнее: какой класс подключается, что за главный класс. И почему Вас не устраивает способ создания объекта класса?

   
 
 автор: globus   (24.05.2007 в 16:44)   письмо автору
 
   для: Andre   (24.05.2007 в 16:31)
 

Смотрите
Есть 3 класса

class.index главный
class.smarty-шаблонизатор
class.board - форум

главный класс наследник шаблонизатора,в нем прописан метод

static function CaseModules()
{
switch(@$_GET['pro'])
{
case 'board' : require_once "classes/board/Main.Board.class.php";new Board();break;
}
}

В зависимости от ссылки идет подключение класса форума,так вот как мне обьявить класс smarty в главном классе чтобы подключаемые модули имели доступ к ее методам

   
 
 автор: Andre   (24.05.2007 в 17:02)   письмо автору
 
   для: globus   (24.05.2007 в 16:44)
 

Можно сделать следующим образом. В конструкторе класса Board создавать объект класса Smarty, а ссылку на него передавать переменной класса Board:

private $objSmarty;
function __construct Board() {
  $this->objSmarty = new Smarty();
}

После этого переменную $objSmarty использовать в методах класса Board.

   
 
 автор: globus   (24.05.2007 в 17:13)   письмо автору
 
   для: Andre   (24.05.2007 в 17:02)
 

Это понадобится делать в каждом модуле и в форуме и новостях короче везде?

   
 
 автор: Andre   (24.05.2007 в 17:15)   письмо автору
 
   для: globus   (24.05.2007 в 17:13)
 

Да

   
 
 автор: Andre   (24.05.2007 в 17:20)   письмо автору
 
   для: globus   (24.05.2007 в 17:13)
 

Есть в принципе и другой вариант: класс Board сделать потомкам класса Smarty, после чего методы класса Smarty вызывать следующим образом: $this->$метод_Smarty. Следует принять во внимание, что методы Smarty не должны быть переопределены в классе Board. Аналогично можно унаследовать Board от главного класса.

   
 
 автор: globus   (24.05.2007 в 17:26)   письмо автору
 
   для: Andre   (24.05.2007 в 17:20)
 

Нет без наследования,если можно.Но вариант предложенный тобой мне не подходит,потомучто

Главный класс тоже совершает некие операции с шаблонизатором,соответственно что получается в конце у нас 2 (!) обьекта smarty и один display,который обьявлен в главном классе,поэтому обьявление класса в модуле не надо делать,помогите найти решение чтобы не создавать 2 классов смарти и использовать методы только 1 обьявленного в главном классе

   
 
 автор: Andre   (24.05.2007 в 17:30)   письмо автору
 
   для: globus   (24.05.2007 в 17:26)
 

Попробуйте передавать объект главного класса как параметр в конструктор класса Board

class Board {
private $objSmarty;
function __construct Board($classMain) {
  $this->objSmarty = $classMain;
}
}
$main = new Main();
$board = new Board($main);

   
 
 автор: globus   (24.05.2007 в 17:39)   письмо автору
 
   для: Andre   (24.05.2007 в 17:30)
 

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

   
 
 автор: Andre   (24.05.2007 в 18:02)   письмо автору
 
   для: globus   (24.05.2007 в 17:39)
 

Приведенный мною код - только пример вызова метода из главного класса. Прошу прощения, при объявлении конструктора слово "Board" не нужно. Если я Вас правильно понимаю, то необходимо сделать следющиее:
1) создать главный класс;
2) вызвать метод главного класса, который определяет подключение модулей;
3) подключить класс определенного модуля;
4) в подключенном классе вызывать методы класса Smarty.
Если так, то:

class Board {
private $objSmarty;
    function __construct($classMain) {
      $this->objSmarty = $classMain;
      $this->objSmarty->show();
    }
}

class Main{
    
    function show() {
        echo "Main_Class";
    }
    
    function startShow() {
        $board = new Board($this);
    }
    
}
$main = new Main();
$main->startShow();

Естественно, если нужны методы Smarty, то класс Main нужно унаследовать от Smarty.

   
 
 автор: globus   (24.05.2007 в 18:55)   письмо автору
 
   для: Andre   (24.05.2007 в 18:02)
 

Позвольте поинтерисоватся что такое $this и $classmain

   
 
 автор: globus   (24.05.2007 в 19:12)   письмо автору
 
   для: globus   (24.05.2007 в 18:55)
 

Создается впечатление что ООП в PHP знает только Andre

   
 
 автор: globus   (24.05.2007 в 19:57)   письмо автору
 
   для: globus   (24.05.2007 в 19:12)
 

Блин народ что я делаю не так почему не помогаете?Я почитал форум тут знающих людей уйма,почему не поможете?

   
 
 автор: Trianon   (24.05.2007 в 20:01)   письмо автору
 
   для: globus   (24.05.2007 в 19:57)
 

Если Вы моего ответа ждете , то извините....
Я не берусь объяснить принципы ООП за пару постов на пальцах.
Тема чересчур объемная. Да и смарти я практически не знаю.

   
 
 автор: globus   (24.05.2007 в 20:07)   письмо автору
 
   для: Trianon   (24.05.2007 в 20:01)
 

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

   
 
 автор: Trianon   (24.05.2007 в 20:25)   письмо автору
 
   для: globus   (24.05.2007 в 20:07)
 

Я же не прошу курс ТОЭ прочитать. И всего лишь прошу показать, как мне сделать удлинитель для микроволновки ... из телефонного провода.... метров 25. Так чтобы всё это работало, а не дымилось. И чтобы пожарные не приезжали через каждые пять минут.

Вот так это примерно звучит.

   
 
 автор: Faraon   (25.05.2007 в 09:01)   письмо автору
 
   для: Trianon   (24.05.2007 в 20:25)
 

:))) Trianon ты как что нибудь отмочишь, хоть стой хоть падай!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования