【问题标题】:Issue with extending class in TYPO3在 TYPO3 中扩展类的问题
【发布时间】:2013-08-23 06:02:39
【问题描述】:

我在 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/

    建议扩展 TYPO3s PHP 类,主要用于个别项目的特殊需求。这是由于一个类只能扩展一次的限制。因此,如果许多扩展尝试扩展同一个类,则只有一个会成功,而其他扩展将无法正常运行。

但是为什么tslib_pibase类可以被不同的扩展类多次扩展呢?

  1. 在每个扩展脚本中添加以下代码是一个好习惯吗?以防万一将来需要扩展扩展类?
    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']);

【问题讨论】:

    标签: typo3


    【解决方案1】:

    XCLASS'ing 是一种方法,当有人用另一个类替换一个类时。听起来像是 OOP 中的继承,但实际上是不同的,因为您只能XCLASS 一次,因为在 TYPO3 全局范围内,一个类定义被另一个类定义替换。

    所以,即你 XCLASS t3lib_db 与 ux_t3lib_db - 这意味着,taht t3lib_db 将永远不会用于 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 是最后一个选项,您应该尝试。使用hookssignals/slots(最后只适用于ExtBase)。

    回答您的第二个问题,我可以说,是的,您可以在 4.5 中执行此操作,但不 - 您不应该从 6.0 执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多