development

symfony2에서 일부 클래스의 인스턴스가 아닌지 확인하는 방법

big-blog 2020. 10. 28. 08:26
반응형

symfony2에서 일부 클래스의 인스턴스가 아닌지 확인하는 방법


엔터티가 몇 가지 클래스의 구성원이지만 일부가 아닌 경우 일부 기능을 실행하고 싶습니다.

라는 함수가 instanceof있습니다.

하지만 뭔가

if ($entity !instanceof [User,Order,Product])

공통 인터페이스를 제공 한 다음

if (!$entity instanceof ShopEntity)

또는 함께

if (!$entity instanceof User && !$entity instanceof Product && !$entity instanceof Order)

한곳에 일부 문자를 저장하기 위해 임의의 함수를 만드는 것을 피할 것입니다. 반면에 "너무 자주"필요한 경우 디자인 결함이있을 수 있습니까? ( "너무 많은 엣지 케이스"등의 의미에서)


PHP 매뉴얼에 따르면 : http://php.net/manual/en/language.operators.type.php

!($a instanceof stdClass)

이것은 논리적이고 "문법적으로"올바른 구문입니다.

!$class instanceof someClass

그러나 위의 제안 된 구문은 부정의 범위를 정확히 지정하지 않았기 때문에 까다 롭습니다 : 변수 자체 또는 $class instanceof someclass. 여기서는 연산자 우선 순위에만 의존하면됩니다 [@Kolyunya 덕분에 편집 됨].


PHP 연산자 우선 순위

instanceof 연산자는 부정 직전에 다음 식입니다.

!$class instanceof someClass

PHP에서 옳고 이것은 당신이 기대하는 것입니다.


이 함수는 다음을 수행해야합니다.

function isInstanceOf($object, Array $classnames) {
    foreach($classnames as $classname) {
        if($object instanceof $classname){
            return true;
        }
    }
    return false;
}

그래서 당신의 코드는

if (!isInstanceOf($entity, array('User','Order','Product')));

function check($object) {
    $deciedClasses = [
        'UserNameSpace\User',
        'OrderNameSpace\Order',
        'ProductNameSpace\Product',
    ];

    return (!in_array(get_class($object), $allowedClasses));
}

또는 이것을 시도 할 수 있습니다

    $cls = [GlobalNameSpace::class,\GlobalNameSpaceWithSlash::class,\Non\Global\Namespace::class];
    if(!in_array(get_class($instance), $cls)){
        //do anything
    }

참고 URL : https://stackoverflow.com/questions/11682126/how-to-check-if-not-instance-of-some-class-in-symfony2

반응형