2010-12-13 2 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

클래스의 인스턴스를 필요로하지 않는 클래스 메소드 호출 (-> 정적 전화), 당신은 남자가 싱글 톤 패턴을 채택하려 ::

+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; 
    } 

그것은 단지 하나의 접근법이지만 다른 것도 있지만 유사합니다. 아이디어는이 특정 클래스의 인스턴스가 하나 뿐이므로 중복되지 않습니다.

관련 문제