Joomla 1.6: как объект $app распечатывает все содержимое страницы

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

эхо $ приложение;

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

Я только что распечатал содержимое этого объекта, используя 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 в объекте.

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


person John K    schedule 19.10.2011    source источник


Ответы (2)


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

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

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

person ComFreek    schedule 19.10.2011
comment
Блин, ты опередил меня на 43 секунды. - person Cyclone; 19.10.2011

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

person Cyclone    schedule 19.10.2011
comment
+1 за тот же контент ;) Но в следующий раз печатайте немного быстрее! - person ComFreek; 20.10.2011
comment
@ComFreek: Ха-ха, спасибо! Я пытался вставить как можно больше информации, поэтому я не просто делал одно из тех самых быстрых пистолетов на западе. Оба ответа решают это красиво! - person Cyclone; 20.10.2011