2014-01-10 5 views
-2

Google에서 수 시간 동안 오버플로 포럼을 검색했지만 선언 된 객체 이름에 대응되는 클래스 이름 만 반환하는 get_declared_classes 함수 이외에는 아무 것도 발견되지 않았습니다.PHP에서 선언 된 클래스의 이름

여기 내가 무엇을하려고하는지 : 기본적으로 범위를 반환 할 수 있도록 페이지 내에서 선언 된 개체의 모든 이름을 가져올 필요가 있습니다. 일부 클래스 인스턴스가있는 큰 mvc 프레임 작업 프로젝트에서 작업하기 때문에 동적 이름. 예를 들어

제가

예는

function blah(foo/bar){ 
return name of for/bar 
} 

I '가 돈 클래스 이름 입력에 기초하여 상기 A, B, CX, Y, Z를 리턴하는 기능을 필요

$a = new foo(); 
$b = new foo(); 
$c = new foo(); 

$x = new bar(); 
$y = new bar(); 
$z = new bar(); 

이것이 가능한지 알기조차하지만 수업이 어떻게 선언되었는지를 결정하는 데 정말로 도움이 될 것입니다.

+0

난 당신이 무슨 뜻인지 이해하기 위해 사투를 벌인거야. 'var_dump ($ this);하면 필요한 것을 해줄까요? – Ryan

+1

PHP에서 리플렉션에 대해 읽어야합니다 http://il1.php.net/manual/en/intro.reflection.php –

+0

var_dump는 특정 변수에 대한 정보를 반환합니다. 알지 못하는 클래스 인스턴스 목록이 필요합니다. 이름 내려. –

답변

2

나는 당신을 올바르게 이해하기를 바랍니다.

  1. 정의 된 모든 변수를 가져 오기 : 자신의 유형별로 get_defined_vars()

  2. 필터 제품 : is_object()


→ Ideone.com live version

class Bar { 
} 
$blub = new Bar(); 

$vars = get_defined_vars(); 
$vars = array_filter($vars, function($var) { 
    return is_object($var) && $var instanceof Bar; 
}); 

foreach ($vars as $object) { 
    echo 'There is one "Bar"!'; 
} 

당신을 수 클래스 이름을 동적으로 검사하기 위해 get_class()을 사용하십시오. → Ideone.com live version

class Bar {} 
class Foo {} 

// we do not want them to be listed in the output 
class EvilBar {} 
class EvilFoo {} 

$a = new Bar(); 
$b = new Foo(); 
$c = new EvilBar(); 
$d = new EvilFoo(); 

$vars = get_defined_vars(); 
$vars = array_filter($vars, function($var) { 
    return is_object($var) && strpos(get_class($var), 'Evil') !== 0; 
}); 

foreach ($vars as $object) { 
    // Doesn't begin with "Evil" 
    if (strpos(get_class($object), 'Evil') !== 0) { 
     echo 'There is one non-evil object and its class name is: ', get_class($object), "\r\n"; 
    } 
} 
+0

내 대답을 올린 후 - 나는이 문제를 해결했습니다. 이걸 가지고있어. +1 –

+1

아마도 특정 유형의 모든 객체가 아닌 모든 인스턴스화 된 객체를 나열하는 것이지만 foreach ($ vars as $ object) echo get_class ($ object); –

+0

변수 범위 지정 규칙이 여전히 적용됩니다. –

관련 문제