php 자동 로드 코드 인 스 턴 스 상세 설명

4412 단어 php자동 로드
1.PHP 에 매 거 진 을 만 들 고 코드 예 시 를 제공 합 니 다.
만약 우리 의 코드 가 매 거 진 상수 와 값 에 대해 더 많은 검증 을 해 야 한다 면 어떻게 해 야 합 니까?
사용 상황 에 따라 저 는 보통 다음 과 같은 간단 한 내용 을 사용 합 니 다.

abstract class DaysOfWeek
{
  const Sunday = 0;
  const Monday = 1;
  // etc.
}

$today = DaysOfWeek::Sunday;
이것 은 확 장 된 예 로 더욱 광범 위 한 사례 에 더욱 잘 서 비 스 를 제공 할 수 있다.

abstract class BasicEnum {
  private static $constCacheArray = NULL;

  private static function getConstants() {
    if (self::$constCacheArray == NULL) {
      self::$constCacheArray = [];
    }
    $calledClass = get_called_class();
    if (!array_key_exists($calledClass, self::$constCacheArray)) {
      $reflect = new ReflectionClass($calledClass);
      self::$constCacheArray[$calledClass] = $reflect - > getConstants();
    }
    return self::$constCacheArray[$calledClass];
  }

  public static function isValidName($name, $strict = false) {
    $constants = self::getConstants();

    if ($strict) {
      return array_key_exists($name, $constants);
    }

    $keys = array_map('strtolower', array_keys($constants));
    return in_array(strtolower($name), $keys);
  }

  public static function isValidValue($value, $strict = true) {
    $values = array_values(self::getConstants());
    return in_array($value, $values, $strict);
  }
}
우 리 는 그것 을 사용 할 수 있다.

abstract class DaysOfWeek extends BasicEnum {
  const Sunday = 0;
  const Monday = 1;
  const Tuesday = 2;
  const Wednesday = 3;
  const Thursday = 4;
  const Friday = 5;
  const Saturday = 6;
}

DaysOfWeek::isValidName('Humpday');         // false
DaysOfWeek::isValidName('Monday');          // true
DaysOfWeek::isValidName('monday');          // true
DaysOfWeek::isValidName('monday', $strict = true);  // false
DaysOfWeek::isValidName(0);             // false

DaysOfWeek::isValidValue(0);             // true
DaysOfWeek::isValidValue(5);             // true
DaysOfWeek::isValidValue(7);             // false
DaysOfWeek::isValidValue('Friday');         // false
2.PHP 자동 로드 클래스 는 무엇 입 니까?
자동 로 더 를 사용 합 니 다.PHP 는 오류 로 인해 실패 하기 전에 마지막 으로 클래스 나 인 터 페 이 스 를 불 러 올 수 있 습 니 다.
PHP 의 splautoload_register()함 수 는 임의의 수량의 자동 로 더 를 등록 할 수 있 으 며,클래스 와 인터페이스 가 정의 되 지 않 아 도 자동 으로 로 더 할 수 있 습 니 다.

spl_autoload_register(function ($classname) {
  include $classname . '.php';
});
$object = new Class1();
$object2 = new Class2();
위의 예시 에서,우 리 는 Class1.php 와 Class2.php 를 포함 할 필요 가 없다.spl_autoload_register()함 수 는 Class1.php 와 Class2.php 를 자동 으로 불 러 옵 니 다.
3.PHP 재 부팅 방법 을 지원 합 니까?
방법 리 셋 은 서로 다른 서명 을 가 진 같은 방법의 이름 을 사용 하 는 현상 입 니 다.PHP 에서 함수 서명 은 이름 에 만 기반 하고 매개 변수 목록 이 포함 되 어 있 지 않 기 때문에 같은 이름 을 가 진 함수 가 두 개 있 을 수 없 기 때문에 PHP 는 재 부팅 방법 을 지원 하지 않 습 니 다.
단,가 변 함 수 를 설명 할 수 있 습 니 다.가 변 수량의 인 자 를 받 아들 일 수 있 습 니 다.당신 은 func 를 사용 할 수 있 습 니 다num_args()와 funcget_arg()는 파 라 메 터 를 전달 하고 정상적으로 사용 합 니 다.

function myFunc() {
  for ($i = 0; $i < func_num_args(); $i++) {
    printf("Argument %d: %s
", $i, func_get_arg($i)); } } /* Argument 0: a Argument 1: 2 Argument 2: 3.5 */ myFunc('a', 2, 3.5);
문답:있 는 게 아니 라autoload 요?왜 안 써 요?
자동 로드 의 원리 및autoload 사용:
자동 으로 불 러 오 는 원 리 는 우리 new class 때 PHP 시스템 이 당신 같은 종 류 를 찾 지 못 하면 이 파일 의 를 자동 으로 호출 하 는 것 입 니 다.autoload ($class_name)방법,우리 new 의 이 classname 은 이 방법의 매개 변수 가 됩 니 다.그래서 우 리 는 이 방법 에서 우리 가 필요 로 하 는 new classname 의 각종 판단 과 구분 은 require 에 대응 하 는 경로 류 파일 을 제거 하여 자동 으로 불 러 옵 니 다.
spl_autoload_register 의 사용:
하나의 항목 이 너무 크 거나 다른 경로 의 파일 을 자동 으로 불 러 올 필요 가 있다 면 autoload 는 사용 하기 어 려 울 것 입 니 다.
이 유 는 한 항목 에 이런 autoload()함수 만 있 을 수 있 기 때 문 입 니 다.PHP 에 서 는 함수 의 이름 을 바 꿀 수 없 기 때 문 입 니 다.
그 러 니까 2 개autoload()함수 파일,그렇지 않 으 면 치 명 적 인 오류 가 발생 합 니 다.
그래서 새로운 spl 로autoload_register()가 그것 을 대체 합 니 다.그리고 집행 효율 이 높 고 유연 하 다.
phop 자동 로드 코드 인 스 턴 스 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 phop 자동 로드 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기