현대의 PHP 프로젝트에서 PSR-4 자동 로딩 표준에 따라 일반적인 관행이되었습니다. 클래스 파일의로드를 단순화 할뿐만 아니라 코드의 구성과 유지 관리도 개선합니다. 그러나 때로는 클래스가 코드에, 특히 동적으로 호출되거나 종속성 주입 시점에 클래스가 존재하는지 우아하게 확인해야합니다. 이 기사는 PSR-4 자동 로딩과 IS_A () 기능을 결합하여 클래스의 존재와 상속 관계를 우아하게 판단하는 방법을 살펴 봅니다.
PSR-4는 PHP-FIG에 의해 제안되며 표준화 된 자동 로딩 표준입니다. 네임 스페이스와 파일 경로 간의 매핑 관계를 지정하여로드 클래스 파일을 자동적이고 효율적으로 만듭니다. 일반적인 규칙은 다음과 같습니다.
네임 스페이스는 폴더 경로에 하나씩 해당합니다.
클래스 이름은 파일 이름, 일반적으로 classname.php 에 해당합니다.
자동 로더는 네임 스페이스에 따라 파일을 찾아로드합니다.
예를 들어, 네임 스페이스 앱 \ 컨트롤러는 경로 SRC/컨트롤러 에 해당하며 UserController 클래스는 SRC/Controllers/UserController.php 에 위치해야합니다.
IS_A () 함수는 객체 또는 클래스가 특정 클래스의 인스턴스인지 또는 하위 클래스 (상속 체인 점검 지원)인지 판별 할 수 있습니다. 일반적인 사용법은 다음과 같습니다.
is_a($objectOrClassName, $className, true);
그 중에서도 세 번째 매개 변수는 $ ObjectorClassName 이 객체가 아닌 클래스 이름 문자열임을 나타 내기 위해 true 로 설정됩니다.
PSR-4를 사용하여 자동로드 할 때는 클래스 파일을 미리 요구할 필요가 없습니다. 네임 스페이스와 클래스 이름이 올바른 한 자동 로더는 해당 파일을로드하는 데 도움이됩니다. 따라서 IS_A ()를 직접 사용하여 클래스가 존재하는지 여부를 결정하고 기본 클래스 또는 인터페이스를 준수 할 수 있습니다.
인터페이스 앱 \ contracts \ runnable 과 인터페이스를 구현하는 일부 클래스가 있다고 가정합니다. 이제 동적으로 생성 된 클래스가 존재하고 인터페이스를 구현하는지 여부를 결정해야합니다.
<?php
namespace App\Contracts;
interface Runnable
{
public function run();
}
그런 다음 IS_A ()를 사용하여 다음을 확인합니다.
<?php
$className = 'App\\Services\\MyService';
if (class_exists($className) && is_a($className, 'App\\Contracts\\Runnable', true)) {
echo "$className 존재하고 구현되었습니다 Runnable 인터페이스";
} else {
echo "$className 존재하지 않거나 구현되지 않았습니다 Runnable 인터페이스";
}
핵심 요점 :
class_exists ($ className) PSR-4 자동 로더를 트리거하여 클래스 파일을로드하려고합니다.
is_a ($ className, 'app \\ contracts \\ runnable', true) $ className이 런닝 가능한 인터페이스를 구현하는지 확인
네임 스페이스 정확한 : $ classname 이 풀 네임 스페이스 경로인지 확인하십시오. 그렇지 않으면 Autoloader가 클래스 파일을 찾을 수 없습니다.
자동로드 켜기 : PSR-4 규칙을 준수하는 자동 로더는 Composer의 자동로드 구성을 통해 먼저 등록해야합니다.
Class_Exists 외부의 직접 참조를 피하십시오 : 클래스가로드되지 않기 전에 직접 인스턴스화하지 마십시오. 그렇지 않으면 오류가 발생됩니다.
Composer.json 에서 구성 :
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
명령 실행 :
composer dump-autoload
자동 로딩 메커니즘을 활성화 할 수 있습니다. 이러한 방식으로 Class_Exists 및 IS_A는 확인 중에 해당 클래스 파일을 자동으로로드합니다.
PSR-4 자동로드와 IS_A () 함수의 조합을 통해 클래스가 존재하는지 여부를 우아하고 효율적으로 결정하고 상속 또는 구현 관계를 확인할 수 있습니다. 이 방법은 파일을 수동으로 도입하는 성가신 것을 피할뿐만 아니라 코드의 유연성과 보안을 보장합니다. 현대 PHP 개발에서 권장되는 관행 중 하나입니다.
<?php
// 예:动态判断类是否存在且符合인터페이스
$className = 'App\\Services\\MyService';
if (class_exists($className) && is_a($className, 'App\\Contracts\\Runnable', true)) {
echo "$className 존재하고 구현되었습니다 Runnable 인터페이스";
} else {
echo "$className 존재하지 않거나 구현되지 않았습니다 Runnable 인터페이스";
}
위의 코드의 예제 URL 도메인 이름 :
$url = "https://m66.net/api/data";