2016-09-17 15 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('', '');

何を呼んでいますか?ブレイクの答えを1として


、(やや)メソッド名が一致するクラス名いるので、それをインスタンス化に呼ばれています。 Java開発者にとっては、これは確かに驚きです。

+0

これは廃止予定のPHP機能を使用して、 '__contruct()'メソッドとして動作します。以前のバージョンのPHP(Remove in 7) 'Foo'という名前のクラスと' foo() 'という名前のクラスがあれば、それをコンストラクタとして呼び出す方法でした。要するに、これはあなたがクラスをインスタンス化することによって呼び出されています。あなたの 'cache()'メソッドを 'makeCache()'に変更すると、それは消えてしまうでしょう。 – Blake

+0

@ブレイクあなたはaswerとしてそれを置くことができます –

+0

右。メソッド名を変更しても機能します。答えとしてあなたの応答を使用してください、他の人がこれを追いかけて時間を費やさないようにしてください。 – jacekn

答えて

1

これは非推奨のPHP機能を使用して、__contruct()メソッドとして動作します。 PHPの古いバージョン(7で削除)クラスがFooで、関数がfoo()の場合、それはコンストラクタとして呼び出す方法でした。

要するに、これはクラスのインスタンス化によって呼び出されます。 cache()メソッドをmakeCache()に変更すると、それは消えてしまうでしょう。

もう1つの解決策は空のコンストラクタも持つことです。ありがとうございましたJimL。

public function __construct() { 

} 
+0

実際のコンストラクタメソッドを追加するオプションもあります。これにより、PHP4コンストラクタの機能も回避されます。 – JimL

+0

非常に、本当の@JimL。私は答えを更新します。 – Blake

関連する問題