2013-04-23 5 views
4

저는 약간의 문제에 직면 해 있습니다. 변수에 클래스 이름이 있고 인스턴스를 만들어야하지만 내 변수가 클래스와 완전히 똑같은 경우를 알 수있는 방법이 없습니다.대/소문자를 구분하지 않고 클래스를 인스턴스화하십시오.

:

//The class I'm fetching is named "App_Utils_MyClass" 
$var = "myclass"; 
$className = "App_Utils_".$var; 
$obj = new $className(); 

가 어떻게이 일을 할 수 있습니까?

추가 정보 :

  • 는 내가 원하는 클래스가 실제로 존재하는지 확인하기 위해이 조각 전에 class_exists() 검사 (대소 문자 구분)를 가지고있다.
  • 클래스 이름은 항상 적절하게 낙타 (예 : MySuperAwesomeClass)입니다.
+0

클래스가 실제로 있는지 확인하기 위해 class_exists (대소 문자를 구분하지 않음)를 사용합니다. – 3rgo

+0

맞춤법이 정확해야하며 대소 문자도 정확해야합니다. 맞춤법이 정확할 것으로 예상하지만 케이스가 맞지 않을 수 있습니다. –

+0

@ Squ36, aah. 그래서 class_exists()는 true를 나타내지 만, 대소 문자가 틀리면 인스턴스화가 잘못 될 수 있습니다. 그게 당신 문제인가요? –

답변

8

PHP의 함수 이름은 대소 문자를 구분하지 않으므로 클래스 생성자와 동일합니다. case이 이미 작동해야합니다. 보십시오이 PHP Manual

주에 따르면

<?php 
class TestClass { 
    var $testValue; 
} 


$a=new testclass(); 
$b=new TestClass(); 
$c=new TESTCLASS(); 
print_r($a); 
print_r($b); 
print_r($c); 

?> 

: 보통은 선언시에 함수를 호출하기 편하게 만들 겠지만 함수 이름은 대소 문자를 구별하지 않는다.

이것은 클래스 메소드에도 적용됩니다.

해결 방법/그 클래스

다음은 당신에 의해 정의 된 바와 같이 클래스 이름은 항상 정확한 경우에 될 수 있도록 할 것이다 이름을 더 나은 방법은있는 case 사용자가

그것을 입력 중요하지 않습니다
<?php  
class TestClass { 
    var $testValue; 
} 


$userEnteredValue="testCLASS"; 
$myClasses=get_declared_classes(); 
$classNameIndex=array_search(strtolower($userEnteredValue), array_map('strtolower', $myClasses)); 
if($classNameIndex!==FALSE) 
{ 
    $classNameShouldBe=$myClasses[$classNameIndex]; 
     echo $classNameShouldBe; 
} 
else 
{ 
    echo "This class is undefined"; 
} 




?> 
+0

안녕하세요. 나는 단지 그것을 보았다! 나는 클래스와 메소드 이름이 대소 문자를 구별했다는 것을 확신했다. 정보를위한 감사합니다 – 3rgo

+0

나는이 언어에있는 그 특징을 정말로 싫어한다. 그것은 나쁜 코딩 관행을위한 공간을 허락한다. 그러나 그 다음에 울기위한 더 많은 것들이있다. 그런 이름을 사용하는 것은 바람직하지 않지만 불행히도 귀하의 질문에 대한 답변입니다. –

+0

그래, 알아. 나는 깨끗한 코드를 좋아하고 이것은 내 믿음에 어긋나게 강요하지만, 나는 선택의 여지가 없다. ... – 3rgo

관련 문제