Joomla 1.6: как объект $ app распечатывает все содержимое страницы - PullRequest
1 голос
/ 19 октября 2011

Я проверял joomla 1.6 index.php и нашел следующий код в последней строке

echo $ app;

печатает все содержимое страницы.

Я только что распечатал содержимое этого объекта с помощью print_r () и получил следующие детали

JSite Object
(
    [template:JSite:private] => stdClass Object
        (
            [id] => 6
            [home] => 1
            [template] => beez5
            [params] => JRegistry Object
                (
                    [data:protected] => stdClass Object
                        (
                            [wrapperSmall] => 53
                            [wrapperLarge] => 72
                            [logo] => images/sampledata/fruitshop/fruits.gif
                            [sitetitle] => Matuna Market 
                            [sitedescription] => Fruit Shop Sample Site
                            [navposition] => left
                            [html5] => 0
                        )

                )

        )

    [_language_filter:JSite:private] => 
    [_detect_browser:JSite:private] => 
    [_clientId:protected] => 0
    [_messageQueue:protected] => Array
        (
        )

    [_name:protected] => site
    [scope] => 
    [requestTime] => 2011-10-17 17:23
    [startTime] => 1318872200.5365
    [_errors:protected] => Array
        (
        )

)

так как echo $ app отображает все содержимое сайта, оно не содержит никакого HTML-содержимого в объекте.

Большое спасибо

Ответы [ 2 ]

5 голосов
/ 19 октября 2011

Объявляет магический метод __toString() в классе.

Если эта функция объявлена ​​в классе, возвращаемое значение будет использовано при приведении объекта к строке.

Простой пример: http://codepad.org/UmZUQA3v

3 голосов
/ 19 октября 2011

$app является объектом, и print_r получает доступ к его значениям по-разному от echo.Когда вызывается echo, он также неявно вызывает магический метод __toString.Это было определено так, что он возвращает строку с содержимым страницы, учитывая значения, хранящиеся внутри объекта.print_r даст вам эти значения, но не представление __toString.

...