我遇到了一些问题.我在变量中有我的类名,我需要实例化它,但我无法知道我的变量具有与类完全相同的情况.
例:
//The class I'm fetching is named "App_Utils_MyClass"
$var = "myclass";
$className = "App_Utils_".$var;
$obj = new $className();
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
附加信息:
class_exists()在此代码段之前有一个检查(不区分大小写),以确保我想要的类实际存在.MySuperAwesomeClass).与流行的看法相反,PHP中的函数名称不区分大小写,对于类构造函数也是如此.你case应该已经工作了.试试这个
<?php
class TestClass {
var $testValue;
}
$a=new testclass();
$b=new TestClass();
$c=new TESTCLASS();
print_r($a);
print_r($b);
print_r($c);
?>
Run Code Online (Sandbox Code Playgroud)
根据PHP手册
注意:函数名称不区分大小写,尽管调用函数通常是在声明中出现的良好形式.
这适用于您的班级方法.
解决方法/更好地命名这些类的方法
以下内容将确保类名始终与您定义的完全相同,无论哪个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";
}
?>
Run Code Online (Sandbox Code Playgroud)