Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Разработка расширений / TYPO3 extension development (http://forum.typo3.ru/forumdisplay.php?f=38)
-   -   USER_INT: статичный вызов и __conctruct (http://forum.typo3.ru/showthread.php?t=6224)

forever 02.05.2008 22:02

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");

    }


Но раз объект не создается, почему происходит вызов конструктора??

void 03.05.2008 00:45

Объект очень даже создаётся:
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, просто приведёт к тому, что в конструкторе будут заданы не поля объекта, а поля класса...

forever 03.05.2008 13:32

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

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


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

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