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 자동 로드 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.