2013-08-21 128 views
0

我看到一些擴展文件在TYPO3 4.5中。 (class.tx_ajaxsearch_pi1.php ...),看起來像這樣:typo3:擴展類在typo3中的問題

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']); 
} 

我檢查這個文件約XCLASShttp://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']); 

回答

2

XCLASS'ing是一種方法,當有人用另一個類代替一個類時。聽起來像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是最後一個選項你應該嘗試。使用hookssignals/slots(最後只能在ExtBase中使用)。

回答你的第二個問題,我可以說,是的,你可以在4.5中做到這一點,但不是 - 你不應該從6.0開始。