Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > Разработка расширений / TYPO3 extension development

Ответ
 
Опции темы Опции просмотра
Старый 02.05.2008, 22:02   #1
forever
Продвинутый
 
Регистрация: 10.09.2006
Сообщений: 49
По умолчанию USER_INT: статичный вызов и __conctruct

Вызываю метод своего класса через USER_INT:

lib.SearchVacancyForm = USER_INT
lib.SearchVacancyForm {
includeLibs = fileadmin/scripts/TelgazController.class.php
userFunc = user_TelgazController->ShowSearchVacancyForm
}


По идее в этом случае производится статический вызов метода без создания объекта.
PHP код:
class user_TelgazController
{
    private 
$smarty;
    
    function 
__construct() {
        
self::$smarty = new Smarty();
        
self::$smarty->template_dir   SCRIPT_PATH."templates/";
        
self::$smarty->compile_dir    SCRIPT_PATH."templates_c/";
        
self::$smarty->config_dir     SCRIPT_PATH."configs/";
        
self::$smarty->cache_dir      SCRIPT_PATH."cache/";
        
self::$smarty->caching false;

    }
    
    static public function 
ShowSearchVacancyForm() {

        return 
self::$smarty->fetch("search_vac.html");

    }

Но раз объект не создается, почему происходит вызов конструктора??
forever вне форума   Ответить с цитированием
Старый 03.05.2008, 00:45   #2
void
Senior Member
 
Аватар для void
 
Регистрация: 14.03.2006
Адрес: Russia, Penza
Сообщений: 1,504
Отправить сообщение для void с помощью ICQ
По умолчанию

Объект очень даже создаётся:
PHP код:
$parts explode('->',$funcName);
if (
count($parts)==2)    {    // Class
    
$cls t3lib_div::makeInstanceClassName($parts[0]);
    if (
class_exists ($cls))    {
        
$classObj = new $cls;
        if (
method_exists($classObj$parts[1]))    {
            
$classObj->cObj = &$this;
             
$content call_user_func_array(array($classObj$parts[1]), array($content$conf));
        
//[...] 
А то, что вы написали self::$smarty, просто приведёт к тому, что в конструкторе будут заданы не поля объекта, а поля класса...
__________________
TYPO3 FAQ
void вне форума   Ответить с цитированием
Старый 03.05.2008, 13:32   #3
forever
Продвинутый
 
Регистрация: 10.09.2006
Сообщений: 49
По умолчанию

И правда, спасибо.

Так как же все-таки быть тогда, если хочется использовать статичные методы? Не обращать внимания на то, что создается объект, создать вместо конструктора метод инициалиции и вызывать его каждый раз из других методов?
forever вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:46.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория