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 )
이것은 어린이 수업에도 효과가 있을 것입니다.
편집: 또는 유형 힌트를 사용할 수 있습니다.
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
'programing' 카테고리의 다른 글
MySQL Workbench는 결과를 BLOB로 표시합니다. (0) | 2023.09.28 |
---|---|
새 가져오기 표준에 의해 시작된 요청을 탐지하려면 어떻게 해야 합니까?일반적으로 어떻게 AJAX 요청을 감지해야 합니까? (0) | 2023.09.28 |
각도 컴파일러는 무엇을 "컴파일"합니까? (0) | 2023.09.28 |
PHP는 주 번호별로 주 시작일과 종료일을 가져옵니다. (0) | 2023.09.28 |
org.springframework.context 형식입니다.구성 가능한 ApplicationContext를 확인할 수 없습니다.필요한 .class 파일에서 간접적으로 참조됩니다. (0) | 2023.09.28 |