2016-09-17 77 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

@布萊克你可以把它當作aswer) –

+0

對。改變了方法名稱,它起作用。請使用你的回答作爲答案,這樣其他人就不會花時間去追逐它。 – jacekn

回答

1

這是使用不推薦的PHP功能作爲__contruct()方法。在舊版本的PHP中(在7中刪除)如果您有一個名爲Foo的類和一個名爲foo()的函數,那麼您將如何將其稱爲構造函數。

總之,這是由你實例化類所調用。如果您將cache()方法更改爲makeCache(),我敢打賭它會消失。

另一種解決方案是也有一個空的構造函數,謝謝JimL。

public function __construct() { 

} 
+0

這也是一個選項,添加一個實際的構造函數方法,這也將避免PHP4的構造函數。 – JimL

+0

非常真實@JimL。我會更新答案。 – Blake