我的系统里有两个类。一个叫file,另一个叫File。 在我的本地主机上创建file类的实例会得到file对象,但是我的朋友运行同样的脚本时却得到了File对象,好像大写字母没有被识别,"file"被等同于"File"。 这是可配置的吗? 我们都在Windows上运行。我用的是WampServer,他用的是XAMPP。
PHP中的类命名不区分大小写。这意味着,即使类被命名为File
,你仍然可以正常执行$file = new file()
,反之亦然。
你是否依赖于自动加载类文件?如果是这种情况,可能会出现解释器在不同计算机上不能总是首先找到相同的文件。这将解释问题所在。
我强烈建议你重新命名你的类。依靠大小写来区分两个不同的东西总是一个坏主意,而按照惯例,类名始终以大写字母开头。
如果无法更改类名,建议查看php namespaces。
在 PHP 中,类名不区分大小写(这与操作系统无关)。
class myclass {}
$x = new MYclaSS;
var_dump($x);
object(myclass)#1 (0) {
}
作为一般建议:你不应该开始并尝试混合那里的东西 :)
像这样的代码不应该能工作:
class ab {}
class AB {}
Fatal error: Cannot redeclare class AB in ... on line x
我猜你正在使用某种类文件的惰性加载,可能是在PHP框架中编程。秘密将在你的__autoload
函数中。找到它。
查看PHP手册中的自动加载。
以下代码:
<?php
class file {
public $a;
}
class File {
public $a2;
}
$x = new file();
Cannot redeclare class File
,所以秘诀可能就在于哪个文件被包含了。file
类,然后当它发现定义File
时,它仅仅认为已经加载了该类(由于PHP的不区分大小写的行为)。