programing

PHP에서 특정 유형의 객체를 확인하는 방법

muds 2023. 9. 28. 08:50
반응형

PHP에서 특정 유형의 객체를 확인하는 방법

PDO 객체를 인수로 받아들이는 방법이 있습니다. 사용자가 새로운 연결을 여는 방법이 아닌 기존 연결을 사용할 수 있도록 하고 리소스를 절약할 수 있도록 하는 방법이 있습니다.

public static function databaseConnect($pdo = null) {

나는 알고 있습니다.is_object()인수가 개체인지 여부를 확인합니다. 그러나 나는 다음을 확인하고 싶습니다.$pdo는 단순한 개체가 아닌 PDO 개체입니다.

사용자가 다른 종류의 객체, mysqli 등을 쉽게 입력할 수 있기 때문에 전체 스크립트가 깨집니다.

간단히 말해: 특정 개체 유형의 변수를 확인하려면 어떻게 해야 합니까?

다음을 사용할 수 있습니다.

if ($pdo instanceof PDO) {
    // it's PDO
}

하지만 당신이 부정할 수 없다는 것을 알아두세요.!instanceof, 그래서 대신에 당신이 하는 것은:

if (!($pdo instanceof PDO)) {
    // it's not PDO
}

또한 질문을 검토할 때 개체 유형 힌트를 사용할 수 있으므로 요구 사항을 강제하고 체크 논리를 단순화할 수 있습니다.

function connect(PDO $pdo = null)
{
    if (null !== $pdo) {
        // it's PDO since it can only be
        // NULL or a PDO object (or a sub-type of PDO)
    }
}

connect(new SomeClass()); // fatal error, if SomeClass doesn't extend PDO

입력된 인수는 필수 또는 선택 사항일 수 있습니다.

// required, only PDO (and sub-types) are valid
function connect(PDO $pdo) { }

// optional, only PDO (and sub-types) and 
// NULL (can be omitted) are valid
function connect(PDO $pdo = null) { }

입력되지 않은 인수는 명시적 조건을 통해 유연성을 허용합니다.

// accepts any argument, checks for PDO in body
function connect($pdo)
{
    if ($pdo instanceof PDO) {
        // ...
    }
}

// accepts any argument, checks for non-PDO in body
function connect($pdo)
{
    if (!($pdo instanceof PDO)) {
        // ...
    }
}

// accepts any argument, checks for method existance
function connect($pdo)
{
    if (method_exists($pdo, 'query')) {
        // ...
    }
}

후자(사용)에 대해서는 제 생각이 좀 엇갈립니다.루비에서 오는 사람들은 좋든 나쁘든 그것이 친숙하다고 생각할 것입니다.저는 개인적으로 인터페이스를 작성하고 그것에 대해 일반적인 타자 힌트를 수행합니다.

interface QueryableInterface
{ 
    function query();
}

class MyPDO extends PDO implements QueryableInterface { }

function connect(QueryableInterface $queryable) { }

그러나, 그것이 항상 실현 가능한 것은 아닙니다; 이 예에서,PDO개체가 기본 유형이 구현되지 않으므로 유효한 매개 변수가 아닙니다.QueryableInterface.

PHP에서 에는 변수가 아닌 유형이 있다는 점도 언급할 필요가 있습니다.이것은 중요합니다 왜냐하면null실패할 것입니다instanceof확인.

$object = new Object();
$object = null;
if ($object instanceof Object) {
    // never run because $object is simply null
}

값은 다음 값이 되면 유형을 잃습니다.null, 활자의 결여

사용하다

 bool is_a ( object $object , string $class_name )

이것은 어린이 수업에도 효과가 있을 것입니다.

http://php.net/is-a 를 참조하십시오.

편집: 또는 유형 힌트를 사용할 수 있습니다.

public static function databaseConnect(PDO $pdo = null) {...

다른 답변에서도 지적했듯이,instanceof,get_class,그리고.is_a아마 당신이 찾으시는 물건일 겁니다

그러나, 어떤 개발자들은 타입을 테스트하는 많은 가드에서 코딩하는 것보다, 특히 다른 프로그래머들이 할 호출에 대해 이야기할 때(프로그래머가 실수했을 때, 앱을 깨는 큰 불평이 거의 틀림없이 좋은 것임), 실행 시간이 실행 시간을 처리하도록 하는 것이 더 생산적이라고 생각합니다.

프로그래머가 메서드를 잘못 사용할 때 스크립트가 손상되지 않도록 하려면 관련 코드 섹션(이 경우 databaseConnect 내부)을 시도 블록에 래핑하고 set_error_handler를 사용하여 스크립트 오류에 대한 예외를 적용할 수 있습니다.그런 다음 예외 조건이 발생했을 때 수행할 작업을 나타내는 하나 이상의 캐치 블록을 설정합니다.

다음과 같은 것을 사용할 수 있다고 생각합니다.

if ($pdo instanceof YOUR_PDO_OBJECT_INSTANCE) {
   // it is...
}

언급URL : https://stackoverflow.com/questions/8091143/how-to-check-for-a-specific-type-of-object-in-php

반응형