TL; DR:类名称不区分大小写,但始终使用与声明中相同的大小写(与函数相同)。 此外,在定义具有不同大小写的类时可能会导致自动加载器出现问题。
此外,类名不区分大小写:
class SomeThing {
public $x = 'foo';
}
$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
这输出:
class SomeThing#1 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#2 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#3 (1) {
public $x =>
string(3) "foo"
}
问题是使用自动加载器和区分大小写的文件系统(如ext2 / 3/4),因为你必须使用相同的情况调用类名,包含类的文件被命名(而不是类名实际如何被命名), 或使用strtolower:
类文件:
// filename something.php
class SomeThing {
...
}
自动装带器功能(strtolower()或注册strtolower的功能)
function my_autloader($className) {
$filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
if (file_exists($filename)) {
require($filename);
}
}
现在有了这段代码:
$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
如果您在自动加载器代码中添加了对strtolower()的调用,那么您可以使这项工作(即使用自动加载器有效地区分大小写的类名),但与函数一样,最好以与声明它相同的方式引用类 ,使用与类名称相同的大小写的文件名,使用自动加载器,并忘记使用strtolower等。