2011-04-05 2 views
2

이것은 아마도 명백한 질문 일 것이지만 확실하길 원합니다.PHP 사전 정의 된 인터페이스 및 SPL - 버전 확인 충분합니까?

"Predefined Interfaces"이 (가) PHP에 포함 된 버전에서 해결하려고합니다. SPL 인터페이스가 문서에 따라 추가 된 것처럼 내 가정은 5.0.0입니다.

또한 구성 또는 재 컴파일을 통해 이러한 기능을 비활성화 할 수 있습니까? 아니면 버전 확인이 해당 존재를 충족한다고 안전하게 가정 할 수 있습니까? SPL과 분리 된 이유는 무엇입니까? SPL이 될 수있는 반면, SPL을 사용할 수없는 차별화 요소는 무엇입니까? (적어도 5.3.0 이전)

답변

1

각 SPL 인터페이스를 사용할 수있는 버전은 here입니다. 일부는 5.0 이후에 추가되었습니다. 그리고 PHP 5.3.0부터 the manual에 따르면 SPL을 비활성화 할 수 없습니다.

+0

Brilliant. 이전에 해당 사이트를보고 있었지만 거기에 버전 정보가 있다는 것을 인식하지 못했습니다. 문서의 해당 섹션이 다른 사람의 홈 디렉토리에 있다고 LOVE하는 경우 : p – pospi

1

나는 인터페이스가 추가되었을 때나 차별화 요소가 무엇인지에 대한 가정보다 더 좋은 대답을하지 못했습니다 (PHP CVS에서 5 분 파고가 생성되지 않았습니다) .

그러나 버전 체크에 의존하지 않고 그 존재를 확인하는 방탄 방법이 있습니다 : interface_exists. PHP 버전 5.0.0 및 5.0.1의 경우 class_exists을 대신 수행해야합니다.

그래서

:

function interfaces_defined() { 
    // Most likely case first 
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) { 
     return true; 
    } 
    else if (version_compare(PHP_VERSION, '5.0.0', '<')) { 
     return false; 
    } 
    else if (version_compare(PHP_VERSION, '5.0.1', '<=')) { 
     return class_exists('Iterator'); 
    } 
    else { 
     return interface_exists('Iterator'); 
    } 
} 

하지 예쁜, 그러나 그것은 확실히 모든 기지를 다룹니다.

+0

나는 계정을 만들기 위해 귀찮게하지 않았고 그렇게 할 담당자가 없다면 나는 당신의 의견을 투표 할 것입니다! 비록 다른 사람들만큼 직접적인 대답은 아니지만, thouroughness를위한 A + : D – pospi

1

현재 설명서에는 각 인터페이스에 속한 메소드의 버전 정보 만 표시됩니다. 이 버전 정보는 메소드 프로토 타입 (info) 위에 페이지 상단에 있습니다.

따라서 메서드 설명을 클릭하고 거기에 나열된 내용을 확인하십시오.

구성을 통해 이러한 기능을 비활성화하거나 다시 컴파일 할 수 있습니까? 아니면 버전 확인이 자신의 존재를 충족한다고 안전하게 가정 할 수 있습니까? SPL과 분리 된 이유는 무엇입니까? SPL이 될 수있는 반면, SPL을 사용할 수없는 차별화 요소는 무엇입니까? (적어도 5.3.0 이전)

이러한 인터페이스는 SPL 확장의 일부가 아니며 활성화 또는 비활성화 할 수 없습니다. Zend 엔진에 구현해야했습니다. SPL이있는 확장 프로그램에서 수행하는 작업을 수행 할 수 없습니다. 그것은 가치가 무엇인지에 대한


, 나는 개요/개요 페이지를 클래스에 버전 정보를 사용할 수 있도록 (따라서 또한 인터페이스)에 대해 얼마 전에 기능 요청 (#49927)를 열었다. 그것이 존재하고 유용하다는 것을 상기시켜 주셔서 감사합니다!