2016-09-17 2 views
0

Нужна помощь в понимании того, что происходит в моем PHP-коде.Почему метод класса PHP вызван при создании экземпляра?

index.php

include("cache.php"); 
$cache = new Cache(); 

cache.php

class Cache { 
    private static $URL_CACHE; 

    public function cache($url, $entityId) { 
     echo '<br>caching '.$url.' as '.$entityId; 
    } 

Когда я прошу index.php, я получаю 'кэширование как' отображается, что это сюрприз. Я никогда не звонил $cache->cache('', '');

Что вы называете методом?


Согласно ответу Блейка, поскольку имя метода совпадает (несколько) с именем класса, оно вызывается при создании экземпляра. Для разработчиков Java это, безусловно, будет сюрпризом.

+0

Использование устаревшей функциональности PHP для использования в качестве метода '__contruct()'. В более старых версиях PHP (Удалено в 7). Если у вас был класс с именем 'Foo' и функция с именем' foo() ', то вы бы назвали его конструктором. Короче говоря, это вызывает вас, создавая экземпляр класса. Если вы измените свой метод 'cache()' на 'makeCache()', я уверен, что он исчезнет. – Blake

+0

@Blake вы можете положить его как aswer) –

+0

Вправо. Изменено имя метода, и оно работает. Пожалуйста, используйте свой ответ в качестве ответа, поэтому другие не тратят время на это. – jacekn

ответ

1

Это использование устаревших функций PHP для работы в качестве метода __contruct(). В более старых версиях PHP (удалено в 7). Если у вас был класс с именем Foo и функция с именем foo(), это было так, как вы бы назвали его конструктором.

Короче говоря, это вы вызываете, создавая экземпляр класса. Если вы измените свой метод cache() на makeCache(), я уверен, он уйдет.

Другое решение - иметь пустой конструктор, а также благодаря JimL.

public function __construct() { 

} 
+0

Это также возможность добавить фактический метод конструктора, который также позволит избежать функциональности конструктора PHP4. – JimL

+0

Очень, правда @ JimL. Я обновлю ответ. – Blake

Смежные вопросы