Отучаем ExtDevEval присваивать значения переменной $this
Так уж случилось, что пришлось заняться разработкой расширений для Typo3. Так вот получилось, что буквально через 15 минут тесного знакомства я нарвался на фатальную ошибку, вызванную расширением ExtDevEval:
Fatal error: Cannot re-assign $this in /var/www/typo3.sjinks.org.ua/typo3conf/ext/extdeveval/class.tx_extdeveval_fetchContentTopMenu.php on line 36
/** * Adding content to display in top frame; Listing of links for developers * * @author Kasper Skaarhoj <kasper@typo3.com> * @coauthor Michael Stucki <michael@typo3.org> * @package TYPO3 * @subpackage tx_extdeveval */ class tx_extdeveval_altTopMenuDummy { function fetchContentTopmenu_processContent (&$this) { $output=''; if ($GLOBALS['BE_USER']->isAdmin()) { global $TYPO3_CONF_VARS; // Render the links from the script options in TYPO3_CONF_VARS $links=array(); if (is_array($TYPO3_CONF_VARS['SC_OPTIONS']['ext/extdeveval/class.ux_sc_alt_topmenu_dummy.php']['links'])) { foreach($TYPO3_CONF_VARS['SC_OPTIONS']['ext/extdeveval/class.ux_sc_alt_topmenu_dummy.php']['links'] as $linkConf) { $aOnClick = "return top.openUrlInWindow('".$linkConf[1]."','ShowAPI');"; $links[]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.htmlspecialchars($linkConf[0]).'</a>'; } } $output.='<strong>Dev links:</strong> ' . implode(' | ',$links); } return $output; } }
Поражает именно способность допустить фатальную ошибку в двадцати с небольшим строках кода и не заметить её!
В чём глубокий философский смысл передавать $this методу, да еще и по ссылке (что характерно, методу этот $this на три буквы не нужен)?
Неужели никто из разработчиков не использует PHP5? Неужели никто не проверил?
К счастью, лечится всё очень просто, быстро и безболезненно: строка
function fetchContentTopmenu_processContent (&$this) {
заменяется на
function fetchContentTopmenu_processContent () {
После этого всё работает


