Отучаем 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? Неужели никто не проверил?
К счастью, лечится всё очень просто, быстро и безболезненно: строка
заменяется на
После этого всё работает


