我的系统中有两个班级。一个叫文件,第二个是File。 在我的本地主机上,当我实例化文件时,我得到文件对象,但我的朋友运行相同的脚本获取文件的对象,如大写字母无法识别,“文件”等于“文件”。 这是一些可配置的东西吗? 我们都在Windows上运行。我有WampServer,他有XAMPP。
答案 0 :(得分:49)
PHP对类命名不区分大小写。这意味着即使该类名为$file = new file()
,您通常也可以File
,反之亦然。
您是否有机会依赖类文件的自动加载?如果是这种情况,则可能根据计算机,解释器并不总是首先找到相同的文件。这将解释这个问题。
我强烈建议你重命名你的课程。依靠案例区分两种不同的东西总是一个坏主意,按照惯例,类名总是以大写字母开头。
如果您无法更改班级名称,我建议您查看php namespaces。
答案 1 :(得分:16)
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
答案 2 :(得分:1)
我猜你正在为类文件使用某种延迟加载,可能你是在PHP框架中编程。秘密将在于你的__autoload
功能。找到它。
以下代码:
<?php
class file {
public $a;
}
class File {
public $a2;
}
$x = new file();
给出错误:Cannot redeclare class File
所以再次,诀窍可能是包含的文件。
代码的行为显示其中一个类未加载(否则您将看到 class redeclare error )。可能是自动加载器首先加载file
类,然后当它找到File
的定义时,它只是假定它已经加载了类(由于PHP的不区分大小写的行为)。 / p>