PHP 개발에서, 특히 Laravel과 같은 프레임 워크를 사용할 때, 우리는 종종 컨트롤러 또는 미들웨어에서 들어오는 요청 객체에 대한 유형 판단을합니다. 이 시나리오는 API 요청 또는 사용자 정의 요청 클래스와 같은 특정 유형의 요청에서 다른 논리가 필요할 때 특히 일반적입니다. 이 기사는 IS_A () 함수를 사용하여 요청 된 객체의 유형 과이 방법의 장점을 결정하는 방법을 소개합니다.
요청이 특정 사용자 정의 요청 클래스인지 여부를 기반으로 후속 논리를 계속 실행할지 여부를 결정 해야하는 미들웨어가 있다고 가정합니다. 예를 들어, API 요청에 대한 사용자 정의 요청 클래스 앱 \ http \ requests \ apirequest를 만들 수 있습니다. 이 경우 미들웨어의 일반 요청과 API 요청을 구별해야합니다.
PHP는 연산자 및 IS_A () 함수를 포함하여 객체 유형을 판단하는 다양한 방법을 제공합니다. 두 기능은 비슷하지만 IS_A ()는 보다 유연한 기능 호출 방법을 제공합니다. 특히 동적 유형 판단 시나리오에 적합합니다.
구문은 다음과 같습니다.
is_a(object|string $object_or_class, string $class, bool $allow_string = false): bool
$ allow_string 이 true 로 설정되면 객체 대신 클래스 이름 문자열을 전달할 수 있습니다.
간단한 미들웨어 예는 다음과 같습니다. 우리는 IS_A ()를 사용하여 요청이 apirequest 유형인지 확인합니다.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Http\Requests\ApiRequest;
class CheckApiRequest
{
public function handle(Request $request, Closure $next)
{
if (is_a($request, ApiRequest::class)) {
// ~에 맞서 API 실행 로직을 요청합니다
// 예를 들어 로깅、특수 헤더 정보 등을 추가하십시오.
}
return $next($request);
}
}
위 코드에서 들어오는 요청 객체가 Apirequest 클래스의 인스턴스 인 경우 특정 논리를 실행할 수 있습니다. 그렇지 않으면 다음 미들웨어 또는 컨트롤러로 직접 전달됩니다.
동일한 논리가 컨트롤러에 적용됩니다. 예를 들어, 컨트롤러 방법에서 :
public function store(Request $request)
{
if (is_a($request, \App\Http\Requests\ApiRequest::class)) {
// 거래하십시오 API 요청의 논리
return response()->json(['message' => '이것은 API 묻다']);
}
// 普通묻다逻辑
return view('form-submitted');
}
이를 통해 동일한 컨트롤러 방법으로 다른 유형의 요청의 차별화 된 처리를 쉽게 구현할 수 있습니다.
때로는 구성 파일 또는 기타 소스에서 클래스 이름을 동적으로 얻을 수 있으며 IS_A () 의 장점이 반영됩니다. 예는 다음과 같습니다.
$className = 'App\Http\Requests\ApiRequest';
if (is_a($request, $className)) {
// 逻辑거래하십시오
}
플러그인 시스템 또는 모듈 식 아키텍처를 구현할 때 매우 실용적입니다.
IS_A ()를 사용하여 요청 객체의 유형을 결정하는 것은 특히 요청 유형에 대한 다른 응답이 필요한 미들웨어 및 컨트롤러에서 명확하고 유연하며 읽기 쉬운 접근 방식입니다. IS_A ()는 인스턴스 와 비교하여 동적 시나리오에 더 적합하며 성능과 정확도도 동일합니다.
이 접근법을 합리적으로 활용하면 복잡한 요청 로직을 처리 할 때 응용 프로그램을보다 모듈화하고 명확하게 만들 수 있습니다. 이 방법을 추가로 연습하려면 더 많은 코드 예제에 대해서는 다음 링크를 참조 할 수 있습니다.