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