2011-03-14 6 views
0

이런 종류의 상속은 php4에서 가능합니까?php4 다중 레벨 상속

class A { 
    var $string; 

    function A() { 
     $this->string = "Hello"; 
    } 
} 

class B extends A { 

    function B() { 
     $this->string = "World"; 
    } 
} 

class C extends B { 

    function C() { 
     $this->string = "FooBar"; 
    } 
} 

$a = new A(); 
$b = new B(); 
$c = new C(); 
        // OUTPUT: 
echo $a->string; // "Hello" 
echo $b->string; // "World" 
echo $c->string; // "FooBar" 
+4

나는 php4를 왜 사용하고 있습니까? – RobertPitt

+0

물론, 나는 사용자가 전체 소프트웨어 패키지를 다운로드하여 시스템에 설치할 수있는 오픈 소스 프로젝트를 진행하고 있기 때문에. 우리는 이것을 사용자가 가능한 한 쉽게 만들고 PHP4/PHP5 및 MySQL4/MySQL5와 호환되도록하고 싶었습니다. 거의 모든 시스템이 현재 시스템에서 많이 변경하지 않고도 몇 번의 간단한 클릭만으로 패키지를 설치할 수 있습니다. – lugte098

+1

오래되고 지원되지 않는 플랫폼 위에는 아무 것도 빌드하지 않아야합니다. – KingCrunch

답변

1

먼저 상호 호환성을 수행 할 때 각 플랫폼에서 최상의 표준으로 실행되는 크로스 빵 응용 프로그램을 만들어야합니다.

/application/classes/database/core.php 
/application/classes/database/util.php 
/application/classes/database/misc.php 
/compat/application/classes/database/core.php 
/compat/application/classes/database/util.php 
/compat/application/classes/database/misc.php 

당신은 다음과 같습니다

내가 이런 짓을 했을까 방법은 PHP 5 개 세부 사항을 필요로하는 응용 프로그램의 절에서는 예를 들어 PHP4

에 대한 호환 파일을 호환 디렉토리를 생성하고로드 할 것입니다 다음 수행 할 수 있습니다

다음
function loadClass($path) 
{ 
    if (version_compare(PHP_VERSION, '5.0.0', '<')) 
    { 
     $path = "/compat/" . $path; 
    } 

    require_once $path; 
} 

loadClass("/application/classes/database/core.php"); 

시간이 지남에 아무도 당신이 단지의 compat 디렉토리를 삭제하고에서 체크를 제거 할 수 있습니다 PHP 4를 사용하지로.

대체 방법으로 오토로더를 등록 할 수 있습니다. 이렇게하면 응용 프로그램 내에서 require_once를 사용하여 프로그램을 작성하고 응용 프로그램을 통해 추가 기능을 사용할 필요가 줄어 듭니다.

위에서 언급 한 hte 클래스에 대한 질문에 정확히 답변 해 주시면 완벽하게 호환됩니다.

당신이 특별히 고려해야 할 PHP4에 대한 응용 프로그램을 만드는 고수 경우

  • 이 수업 방법에 대한 공공/민간 수식을 사용하지 마십시오.
  • 항상 클래스 이름을 __construct 대신 생성자로 사용하십시오.
  • 클래스를 함수에 전달할 때는 항상 & 기호를 사용하여 참조를 전달해야합니다.
  • __tostring 또는 __destruct과 같은 마법 방법을 사용하지 마십시오.

항상 PHP4 시스템에서 응용 프로그램을 만든 다음 최신 버전의 PHP5에서 테스트해야합니다. (적절히 수정하십시오)

+0

나는 당신의 충고를 마음에 받아 들일 것이다. 내가 이미 구현했거나 고려한 것들이 있습니다. 다른 것들은 아직 생각하지 못했습니다. 좋은 대답! – lugte098

+0

문제 없음, 그것이 효과가 있기를 바랍니다 :) – RobertPitt

1

PHP 참조 페이지의 노트를 보면 php4에서 다중 레벨 상속이 지원되지 않았는지 언급하지 않습니다. 따라서 버전 4에서 작동해야합니다.

아마도 PHP 4 인터프리터를 가진 사람이 보증 할 수 있습니다.

+1

PHP 4와 PHP 5를 구분하는 주된 사실은 PHP 5 클래스에서 항상 참조에 의해 전달되는 사실이며, 생성자가 작동하는 방식과는 다른 것입니다. 바로 그 외에는 거의 동일합니다. 몇 가지 마법 메서드를 사용합니다 . – RobertPitt

+1

음, PHP와 상속에 관한 소문이 너무 많아서 php4에서 제대로 작동하지 않는다고 주장하는 인터넷에서이 질문을하고 있습니다.나는 그것이 다중 레벨 상속을 포함하는지 잘 모르겠다. ... – lugte098