2012-03-07 5 views
2

다른 모든 파일을 포함하는 기본 클래스가 있습니다. 내 전체 응용 프로그램 (예 : base::$var 또는 base::function())을 통해이 수업 (공개)에 액세스 할 수 있습니다.PHP에서 형제 (?) 변수에 액세스

이 기본 클래스의 기능 중 하나는 추가 프레임 워크를로드하는 것입니다. 하나의 프레임 워크는 다음과 같이 보입니다 (단순화 된) - 여기에서 보았던 싱글 톤을 기반으로합니다.

public static function createInstance($variable, $class){ 
    if (class_exists($class)){ 
     $variable = $class::Instance(); 
    } 
} 

목표는 내가 $base을 같은 방법으로 $blah에 액세스 할 수 있습니다 : base::createInstance

<?php 
class someOtherFramework{ 

    public static $site = array(); 

    public static function Instance() { 
     static $inst = null; 
     if ($inst == null) { 
      $inst = new someOtherFramework(); 
     } 
     return $inst; 
    } 

    private function __construct() { 

    } 
} 

base::createInstance('blah', 'someOtherFramework'); 
?> 

호출 는 다음과 같습니다. 가능한가? 이게 말이 돼? 그렇지 않은 경우 다른 개발자가 사용하고자하는 클래스에 대한 액세스를 제공하는 가장 좋은 방법은 무엇입니까?

+0

제공된 답변과 의견을 읽은 후에도 계속 최선의 방법을 평가하고 있습니다. 필요에 따라 해당 클래스를 수동으로 만들고 해당 클래스의 멤버로 만들 수 있습니까? 나는 내가 행복해하는 것을 얻은 후에 오늘이 대답을 마무리 할 것이다. – EvilChookie

답변

1

당신의 'ㅋ'에 액세스 할 수있는 유일한 방법 변수는 그것이 글로벌 변수인지 여부입니다. 이것은 실제로 OOP 디자인이 아닙니다.

아마도 이러한 변수가 모두 포함 된 참조로 전달되는 레지스트리 클래스를 작성해야할까요? 나 자신을 위해, 나는 그 일을 더 깔끔하게한다. (그리고 이클립스 IDE 덕분에 악몽에 사로 잡히지 않는다.) - 개인적으로, 나는 싱글 톤 클래스를 좋아하지 않는다.

... 비록 당신이 올린 코드가, 정확히 이해가된다. 자세한 내용을 게시 할 수 있습니까?

+0

그 이유는 PHP 프로젝트에서 사용하는 기본 프레임 워크를 만들었 기 때문입니다. 내 프레임 워크는 내 프로필에 공개되어 있기 때문에 다른 개발자에게 자신의 프레임 워크를 추가하고 응용 프로그램 내의 모든 적절한 모듈에 자동으로로드 할 수있는 방법을 제공 할 수 있기를 바랍니다. – EvilChookie

+0

유일한 싱글 톤을 만드는 경우 변수가 무엇이라고 불리는 것이 중요할까요? 그들은 $ class :: Instance()를 호출 할 수 있기 때문에; 또는 모든 클래스가 getInstance()라는 함수를 상속 받도록 만들 수 있습니다.이 함수는 액세스되는 클래스의 이름이 무엇인지 결정하고 Instance()를 호출합니다. 그 클래스의 – DdD

+0

나는 이것이 많이 혼란스러워진다는 것을 안다.하지만 OOP 디자인은 다른 언어 기능에 거의 영향을 미치지 않는다. 특히 변수 범위 지정. – mario

1

모든 전역 변수를 포함하는 배열 인 $GLOBALS을 사용할 수 있습니다. 함수 내에서 액세스 할 수 있습니다. 아마도 global 키워드와 variable variables도 있습니다. $GLOBALS를 사용

, 당신은 같은 것을 할 거라고 다음 global 키워드로

$GLOBALS[$variable] = $class::Instance(); 

을, 함수는 다음과 같이 보일 것이다 :

global $$variable; 
if (class_exists($class)){ 
    $$variable = $class::Instance(); 
} 
+0

좋은 대답을하는 동안, 나는 커맨드 스타일 인터페이스 체인으로 끝났다. Dimitri의 대답을 확인하십시오. – EvilChookie