我的系统中有两个类。一个是文件,另一个是文件。在我的本地主机上,当我实例化文件时,我得到的是文件对象,但我的朋友运行相同的脚本时得到的是文件对象,就像大写字母无法识别," file“等于" file”。这是一些可配置的东西吗?我们都在Windows上运行。我有WampServer,他有XAMPP。
发布于 2011-03-10 21:26:36
PHP对类命名不区分大小写。这意味着即使类被命名为File,你也可以正常地执行$file = new file(),反之亦然。
您是否碰巧依赖于类文件的自动加载?如果是这样的话,根据计算机的不同,解释器可能并不总是首先找到相同的文件。这将解释这个问题。
我强烈建议您重命名您的类。依靠大小写来区分两个不同的东西总是一个坏主意,而且按照惯例,类名总是以大写字母开头。
如果你不能改变类名,我建议你去看看php namespaces。
发布于 2011-03-10 21:26:32
PHP中的类名不区分大小写(这与操作系统无关)
class myclass {}
$x = new MYclaSS;
var_dump($x);
object(myclass)#1 (0) {
}因此,作为一般建议:您不应该开始并尝试在那里混合一些东西:)
这样的代码应该not工作:
class ab {}
class AB {}
Fatal error: Cannot redeclare class AB in ... on line x发布于 2011-03-10 21:30:43
我猜您正在使用某种延迟加载来加载类文件,可能您是在PHP框架中编程。秘诀在于你的__autoload函数。找到它。
检查PHP manual for Autoloading。
以下代码:
<?php
class file {
    public $a;
}
class File {
    public $a2;
}
$x = new file();给出一个错误:Cannot redeclare class File所以,诀窍可能是包含了哪个文件。
您的代码行为显示其中一个类没有被加载(否则您将看到类重新声明错误)。可能是自动装载器首先装入file类,然后当它找到File的定义时,它只是假定已经装入了类(由于PHP大小写不敏感的行为)。
https://stackoverflow.com/questions/5260168
复制相似问题