Php XCLASS-致命错误:调用未定义的方法
我使用的是Typo36.2,我想用XCLASS扩展现有的扩展。现有扩展具有命名空间A。XClass来自namspace B。以下代码定义了一些将被覆盖的类和方法: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\
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
}
}
}