PHP 에서 abstract(추상),final(최종),static(정적)원리 와 용법 에 대한 상세 한 설명

본 논문 의 사례 는 PHP 에서 abstract(추상),final(최종)과 static(정적)원리 와 용법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
추상(추상)
PHP 5 는 추상 적 인 클래스 와 추상 적 인 방법 을 지원 합 니 다.추상 적 인 클래스 로 정의 되 어 예화 되 어 서 는 안 된다.어떤 유형 이 든 그 안에 적어도 하나의 방법 이 추상 적 인 것 으로 밝 혀 진다 면 이런 유형 은 추상 적 인 것 으로 밝 혀 져 야 한다.추상 적 인 방법 으로 정의 되 는 것 은 호출 방식(매개 변수)을 설명 하 는 것 일 뿐 구체 적 인 기능 실현 을 정의 할 수 없다.
추상 류 를 계승 할 때 자 류 는 반드시 부류 중의 모든 추상 적 인 방법 을 정의 해 야 한다.또한 이러한 방법의 접근 통 제 는 부모 클래스 와 같 아야 한다(또는 더 느슨 해 야 한다).예 를 들 어 어떤 추상 적 인 방법 이 보 호 받 는 것 으로 밝 혀 지면 하위 클래스 에서 이 루어 지 는 방법 은 보 호 받 거나 공유 되 는 것(엄격 한 정도:private>protected>Public)이 라 고 밝 혀 야 지 사유 로 정의 할 수 없다.그 밖 에 방법의 호출 방식 은 반드시 일치 해 야 한다.즉,유형 과 필요 한 매개 변수 수량 이 일치 해 야 한다.예 를 들 어 하위 클래스 는 선택 할 수 있 는 매개 변 수 를 정 의 했 고 부모 추상 적 인 방법의 성명 에 없 으 면 이들 의 성명 은 충돌 하지 않 았 다.이 는 PHP 5.4 의 구조 함수 에 도 적용 된다.PHP 5.4 이전의 구조 함수 설명 은 다 를 수 있 습 니 다.
요약:
4.567917.추상 류 는 예화 되 어 서 는 안 된다4.567917.유형 중 어떤 추상 적 인 방법 이 있 으 면 이런 유형 도 추상 적 이 어야 한다4.567917.추상 류 는 호출 방식 과 매개 변수 만 설명 할 수 있 고 구체 적 인 기능 실현 을 정의 할 수 없다4.567917.추상 류 를 계승 하 는 자 류 는 추상 류 의 모든 추상 적 인 방법 을 실현 해 야 한다4.567917.하위 클래스 에서 실 현 된 추상 적 인 방법의 방문 통 제 는 부모 류 의 방문 통제 보다 더욱 엄격 해 야 한다4.567917.하위 클래스 에서 실현 되 는 방법의 호출 방식 과 매개 변수 수량 은 반드시 실현 되 는 방법 과 일치 해 야 한다예:

<?php
abstract class AbstractClass
{
  //             ,       
  abstract protected function getValue();
  abstract protected function prefixValue($prefix);

  //     (     ),       
  public function printOut() {
    print $this->getValue() . "
"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { // public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."
"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."
"; ?>

<?php
abstract class AbstractClass
{
  //                  
  abstract protected function prefixName($name);

}

class ConcreteClass extends AbstractClass
{

  //                        
  public function prefixName($name, $separator = ".") {
    if ($name == "Pacman") {
      $prefix = "Mr";
    } elseif ($name == "Pacwoman") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$prefix}{$separator} {$name}";
  }
}

$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "
"; echo $class->prefixName("Pacwoman"), "
"; ?>
final
부모 클래스 의 방법 이 final 로 밝 혀 지면 하위 클래스 는 이 방법 을 덮어 쓸 수 없습니다.하나의 클래스 가 final 로 밝 혀 지면 계승 할 수 없습니다.
이것 은 비교적 이해 하기 쉬 우 니,군말 은 하지 마라
static
성명 류 속성 이나 방법 이 정적 이면 실례 화 되 지 않 고 직접 접근 할 수 있 습 니 다.정적 속성 은 실례 화 된 대상 을 통 해 접근 할 수 없습니다.(정적 방법 은 가능 합 니 다.)
PHP 4 를 호 환 하기 위해 서 접근 제어 가 지정 되 지 않 으 면 속성 과 방법 은 기본적으로 공유 합 니 다.
정적 방법 은 대상 을 통 해 호출 할 필요 가 없 기 때문에 의사 변수$this 는 정적 방법 에서 사용 할 수 없습니다.
정적 속성 은 대상 이->연산 자 를 통 해 접근 할 수 없습니다.
정적 방식 으로 비 정적 방법 을 호출 하면 ESTRCT 급 오류 입 니 다.
다른 모든 PHP 정적 변수 와 마찬가지 로 정적 속성 은 문자 나 상수 로 초기 화 될 수 있 을 뿐 표현 식 을 사용 할 수 없습니다.따라서 정적 속성 을 정수 나 배열 로 초기 화 할 수 있 지만 다른 변수 나 함수 반환 값 으로 초기 화 할 수 없고 대상 을 가리 킬 수 없습니다.
PHP 5.3.0 부터 하나의 변수 로 동적 호출 클래스 를 사용 할 수 있 습 니 다.그러나 이 변수의 값 은 키워드 self,parent 또는 static 일 수 없습니다.
요약:
4.567917.정태 적 인 방법 은 실례 화 되 지 않 고 직접 방문 할 수 있다4.567917.클래스 의 예화 대상 은 클래스 의 정적 속성 에 접근 할 수 없 지만 정적 방법 에 접근 할 수 있 습 니 다
  • 의사 변수$this 는 정적 방법 에서 사용 할 수 없습니다
  • 4.567917.정적 속성 은 대상 이->연산 자 를 통 해 접근 할 수 없습니다
  • 정적 방식 으로 비 정적 방법 을 호출 하면 ESTRICT 레벨 의 오류;
  • 4.567917.정적 속성 은 문자 나 상수 로 초기 화 될 수 있 을 뿐 표현 식(함수 반환 값/하나의 변수/대상)을 사용 할 수 없습니다4.567917.하나의 변수 로 동적 호출 클래스 를 사용 할 수 있 습 니 다.그러나 이 변수의 값 은 키워드 self,parent 또는 static 일 수 없습니다
    
    <?php
    class Foo
    {
      public static $my_static = 'foo';
    
      public function staticValue() {
        return self::$my_static;
      }
    }
    
    class Bar extends Foo
    {
      public function fooStatic() {
        return parent::$my_static;
      }
    }
    
    print Foo::$my_static . "
    "; $foo = new Foo(); print $foo->staticValue() . "
    "; print $foo->my_static . "
    "; // Undefined "Property" my_static print $foo::$my_static . "
    "; $classname = 'Foo'; print $classname::$my_static . "
    "; // As of PHP 5.3.0 print Bar::$my_static . "
    "; $bar = new Bar(); print $bar->fooStatic() . "
    "; ?> </programlisting> </example> <example> <title> </title> <programlisting role="php"> <![CDATA[ <?php class Foo { public static function aStaticMethod() { // ... } } Foo::aStaticMethod(); $classname = 'Foo'; $classname::aStaticMethod(); // PHP 5.3.0 ?>
    더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
    본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기