Отучаем 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



Код, честно говоря, поражает:

[-]
View Code PHP
/**
 * 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? Неужели никто не проверил?

К счастью, лечится всё очень просто, быстро и безболезненно: строка

[-]
View Code PHP
        function fetchContentTopmenu_processContent (&$this)    {

заменяется на

[-]
View Code PHP
        function fetchContentTopmenu_processContent ()    {

После этого всё работает

Добавить в закладки

Связанные записи

12
Май
2008

Комментарии к статье «Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок»  »

К статье «Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок» комментариев пока нет. Не хотите ли стать первым?

Подписаться на RSS-ленту комментариев к статье «Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок» Trackback URL: http://blog.sjinks.org.ua/php/135-typo3-extdeveval-php5-getting-rid-of-fatal-errors/trackback/

Оставить комментарий к записи «Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя