我看到了TYPO3 4.5中的一些扩展文件。 (class.tx_ajaxsearch_pi1.php
...),看起来像这样:
class tx_ajaxsearch_pi1 extends tslib_pibase {
...
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']);
}
我正在查看有关XCLASS
:http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/3/8/
问题:
1.根据本文件:http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/3/8/
Extending TYPO3s PHP classes is recommended mostly for special needs in individual projects. This is due to the limitation that a class can only be extended once. Thus, if many extensions try to extend the same class, only one of them will succeed and in turn the others will not function correctly
但为什么类tslib_pibase
可以通过不同的扩展类多次扩展?
2.在每个扩展脚本中放置以下代码是一个好习惯吗?以防扩展类将来需要扩展?
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']);
答案 0 :(得分:3)
当有人用另一个类代替一个类时,XCLASS是一种方法。听起来像OOP中的继承,但事实上它是不同的,因为你只能 XCLASS一次,因为在TYPO3全局范围内,一个类定义被另一个类定义替换。
所以,即你用XCLASS t3lib_db和ux_t3lib_db - 这意味着,taht t3lib_db将永远不会用于数据库处理,但是ux_t3lib_db
当然,你的XCLASS可以扩展基类,比如ux_t3lib_db extends t3lib_db
,所以它适用于OOP的继承,但是如果其他人想要XCLASS t3lib_db,这将失败,因为TYPO3将找不到它的t3lib_db范围,因为它已经被ux_t3lib_db替换。因此,唯一的赢家将是XCLASS首先获胜的人。
您可以阅读更多here。
但是,总的来说, XCLASS'ing是你应该尝试的最后一个选项。使用hooks或signals/slots(最后仅适用于ExtBase)。
回答你的第二个问题,我可以说,是的,你可以在4.5中做到这一点,但不是 - 你不应该从6.0那样做。