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