|
|
|
| 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 эта функция прописана | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 14:19)
| | метод assign не определен в классе index | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 14:25)
| | НЕт зачем он мне в классе index это в классе smarty который и вызывается.НО
В классе smarty есть конструктор,который обращяется к методу того же smarty,через $this->assign
Это и вызывает ошибку,несмотря на то что метод assign определен и работает но почему то не пожет быть вызван!Я думаю потому что это проиходит из другого класса?Если да то что мне делать. | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 14:32)
| | Для того, чтобы обратиться к методам класса Smarty, которые содержат вызов других методов, необходимо создать объект класса Smarty, либо же унаследовать Ваш класс index от класса Smarty. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 14:45)
| | поподробней можно... | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 15:17)
| | То есть у Вас происходит обращение к методам класса Smarty используя его как пространства имен. Для того, чтобы использовать его как класс, необходимо создать его объект $smarty = new Smarty;. После этого уже обращаться к методу assign() следующим образом: $smarty->assign('d','a');. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 15:24)
| | А если обращение происходит из совершенно другого класса,как тогда быть
Класс рекйрится из главного где я обьявлю смарти. | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 15:26)
| |
Smarty::Smarty();
Smarty::assign('d','a');
|
Конкретно для этого случая следует сделать следющее:
$smarty = new Smarty();
$smarty->assign('d','a');
|
Предварительно должен быть подключен файл с классом Smarty. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 15:42)
| | Это имхо как то не так потому что тоже самое происходит в главном классе,а повторять зачем?Других способов нету. | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 15:44)
| | Если у Вас уже создан объект класса Smarty, то можно обратиться сразу к методу assign('a','b');:
$smartyObject->assign('a','b');
|
где $smartyObject - объект класса Smarty. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 15:49)
| | Ммм.Понимаете класс smarty был обьявлен в главном классе он же определяет в зависимости он URL что подключать,вот они используют смарти,как тогда обратится.Тоесть как мне обратится к переменной главного класса из вызываемого | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 16:01)
| | Все также, как и выше написано. То есть, если у Вас класс index является потомком класса Smarty, а Вы желаете обратиться конкретно к методу класса Smarty в классе index, то следует создать объект класса Smarty, а уже потом обращаться к методам последнего через созданный объект. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 16:20)
| | Как я к нему обращюсь,если подкл.класс не является потомком главного класа а всеволишь вызывается из него | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 16:25)
| | Значит поподробнее: какой класс подключается, что за главный класс. И почему Вас не устраивает способ создания объекта класса? | |
|
|
|
|
|
|
|
для: 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 в главном классе чтобы подключаемые модули имели доступ к ее методам | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 16:44)
| | Можно сделать следующим образом. В конструкторе класса Board создавать объект класса Smarty, а ссылку на него передавать переменной класса Board:
private $objSmarty;
function __construct Board() {
$this->objSmarty = new Smarty();
}
|
После этого переменную $objSmarty использовать в методах класса Board. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 17:02)
| | Это понадобится делать в каждом модуле и в форуме и новостях короче везде? | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 17:13)
| | Да | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 17:13)
| | Есть в принципе и другой вариант: класс Board сделать потомкам класса Smarty, после чего методы класса Smarty вызывать следующим образом: $this->$метод_Smarty. Следует принять во внимание, что методы Smarty не должны быть переопределены в классе Board. Аналогично можно унаследовать Board от главного класса. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 17:20)
| | Нет без наследования,если можно.Но вариант предложенный тобой мне не подходит,потомучто
Главный класс тоже совершает некие операции с шаблонизатором,соответственно что получается в конце у нас 2 (!) обьекта smarty и один display,который обьявлен в главном классе,поэтому обьявление класса в модуле не надо делать,помогите найти решение чтобы не создавать 2 классов смарти и использовать методы только 1 обьявленного в главном классе | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 17:30)
| | Мы не понимаем друг друга
Главный класс на то и главный он определяет какой модуль подключать,тоесть главный класс должен вызваться там же где и находится,а класс board а это класс который подключает главный класс,соответственно нада что бы вызвался только главный класс а уже конструктор определит что подключать. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Andre
(24.05.2007 в 18:02)
| | Позвольте поинтерисоватся что такое $this и $classmain | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 18:55)
| | Создается впечатление что ООП в PHP знает только Andre | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 19:12)
| | Блин народ что я делаю не так почему не помогаете?Я почитал форум тут знающих людей уйма,почему не поможете? | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 19:57)
| | Если Вы моего ответа ждете , то извините....
Я не берусь объяснить принципы ООП за пару постов на пальцах.
Тема чересчур объемная. Да и смарти я практически не знаю. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 20:01)
| | Я же не прошу принципы,да и тема не обширная я все волишь прошу показать мне как передеть все методы класса другому классу,без наследования,и чтобы при изменении переданных данных их параметры изменялись и в главном классе.
Пожалуйста | |
|
|
|
|
|
|
|
для: globus
(24.05.2007 в 20:07)
| | Я же не прошу курс ТОЭ прочитать. И всего лишь прошу показать, как мне сделать удлинитель для микроволновки ... из телефонного провода.... метров 25. Так чтобы всё это работало, а не дымилось. И чтобы пожарные не приезжали через каждые пять минут.
Вот так это примерно звучит. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 20:25)
| | :))) Trianon ты как что нибудь отмочишь, хоть стой хоть падай! | |
|
|
|