2010-12-13 10 views
0

すべて、php:include/require_onceの後にスコープ解決シンボル(::)を使用するタイミング

私はw3Style's front controller tutorialから、このコードサンプルを見てい

を理解したいと思います:::はこの中で必要とされるのはなぜ

のindex.php

<?php 
define("PAGE_DIR", dirname(__FILE__) . "/pages"); 
require_once "FrontController.php"; 
FrontController::createInstance()->dispatch(); 

場合?

「FrontController.php」に別のクラスを作成する際の柔軟性と、この名前のメソッドもありますか?それとも、同じメソッド名を組み込んだ、異なるクラスの複数のインクルードがある場合に対処するのでしょうか?

おかげで、

JDelage

+2

http://php.net/manual/en/keyword.paamayim-nekudotayim.php – jwueller

+0

'require' /' include'にはまったく関係ありません。クラスがどのように機能するかだけです。 –

+0

はい、私はそれを読んだが、私はまだ不明です。リンクを投稿してくれてありがとう、私はそれを含めるべきだった。 – JDelage

答えて

4

FrontControllerSingleton classと思われる。

createInstance()メソッドは静的(したがって::)と呼ばれ、オブジェクトインスタンスを作成します。次に、dispatch()メソッドが結果オブジェクト(したがって->)に対して実行されます。

1

FrontControllercreateInstance()静的メソッドを持つクラスであるためです。

+0

このように静的ではないので、演算子は必要ありませんでしたか? – JDelage

+1

メソッドが静的でない場合は、クラスをインスタンス化して代わりに ' - >'を使用する必要があります。 –

+0

ありがとうIgancio。 – JDelage

0

クラスのインスタンスを必要としないクラスメソッドの呼び出し( - >静的コール)、あなたは男がSingletonパターンを採用しようとした::

+0

E_STRICT通知を避けるためには静的メソッドを宣言する必要があります(少なくともPHP 5.3以降は以前のバージョンについてはわかりません) –

0

ことによってそれを呼び出すことができますが、間違いがであり、彼コード:

この:

class FrontController { 
    public static function createInstance() { 
    if (!defined("PAGE_DIR")) { 
     exit("Critical error: Cannot proceed without PAGE_DIR."); 
    } 
    $instance = new self(); 
    return $instance; 
    } 

なった場合のようなもの:

class FrontController { 
    var $instance = NULL; 
    public static function createInstance() { 
    if (!defined("PAGE_DIR")) { 
     exit("Critical error: Cannot proceed without PAGE_DIR."); 
    } 
    if($this->instance == NULL) { 
     $this->instance = new self(); 
    } 

    return $this->instance; 
    } 

これは単なるアプローチですが、異なっていますが類似しています。アイデアは、この特定のクラスのインスタンスが1つしかなく、重複はありません。

関連する問題