Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php XCLASS-致命错误:调用未定义的方法_Php_Typo3_Typo3 6.2.x - Fatal编程技术网

Php XCLASS-致命错误:调用未定义的方法

Php XCLASS-致命错误:调用未定义的方法,php,typo3,typo3-6.2.x,Php,Typo3,Typo3 6.2.x,我使用的是Typo36.2,我想用XCLASS扩展现有的扩展。现有扩展具有命名空间A。XClass来自namspace B。以下代码定义了一些将被覆盖的类和方法: namespace A; class Class1 { protected function func1(\A\Class2 obj) { //do something } } class Class2 {...} namespace B; class ux_Class1 extends \A\

我使用的是Typo36.2,我想用XCLASS扩展现有的扩展。现有扩展具有命名空间A。XClass来自namspace B。以下代码定义了一些将被覆盖的类和方法:

namespace A;

class Class1 {
    protected function func1(\A\Class2 obj) {
        //do something
    }
}

class Class2 {...}

namespace B;

class ux_Class1 extends \A\Class1 {
    protected function func1(\A\Class2 obj) {
        parent::func1(obj);
        obj->func2();
    }
}

class ux_Class2 extends \A\Class2 {
    protected function func2() {
        //do something
    }
}

$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['A\\Class1'] = array('className' => 'B\\ux_Class1');
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['A\\Class2'] = array('className' => 'B\\ux_Class2');
但我得到了以下错误:

致命错误:调用中未定义的方法A\Class2::func2() 第6行的B/ux_Class1.php


为什么会这样?是否应该调用B\ux\u Class2::func2(),因为用XCLASS覆盖?

这取决于如何实例化
A\Class2
。如果使用
GeneralUtility::makeInstance()
而不是
newa\Class2()
完成,它应该可以工作。在较新的TYPO3版本中不再需要
ux
前缀

如果在Extbase上下文中使用该类,则大多数实例化都是使用
ObjectManager
处理的。在这方面,必须直接在例如
ext\u localconf.php
或通过打字脚本注册替代实现

ext_localconf.php 前端打字稿
这取决于如何实例化
A\Class2
。如果使用
GeneralUtility::makeInstance()
而不是
newa\Class2()
完成,它应该可以工作。在较新的TYPO3版本中不再需要
ux
前缀

如果在Extbase上下文中使用该类,则大多数实例化都是使用
ObjectManager
处理的。在这方面,必须直接在例如
ext\u localconf.php
或通过打字脚本注册替代实现

ext_localconf.php 前端打字稿
/** @var $extbaseObjectContainer \TYPO3\CMS\Extbase\Object\Container\Container */
$extbaseObjectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
    \TYPO3\CMS\Extbase\Object\Container\Container::class
);
$extbaseObjectContainer->registerImplementation(
    \A\Class2::class,
    \B\Class2::class
);
config.tx_extbase {
    objects {
        A\Class2 {
            className = B\Class2
        }
    }
}