【发布时间】:2011-07-12 17:21:05
【问题描述】:
我的系统中有两个类。一个叫做文件,第二个是文件。 在我的本地主机上,当我实例化文件时,我得到了文件对象,但是我的朋友运行相同的脚本得到了文件的对象,就像大写字母无法识别并且“文件”等于“文件”一样。 这是一些可配置的东西吗? 我们都在 Windows 上运行。我有 WampServer,他有 XAMPP。
【问题讨论】:
-
你真的不应该这样混用名字
我的系统中有两个类。一个叫做文件,第二个是文件。 在我的本地主机上,当我实例化文件时,我得到了文件对象,但是我的朋友运行相同的脚本得到了文件的对象,就像大写字母无法识别并且“文件”等于“文件”一样。 这是一些可配置的东西吗? 我们都在 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
class file {
public $a;
}
class File {
public $a2;
}
$x = new file();
给出一个错误:Cannot redeclare class File 再次,诀窍可能是包含的文件。
您的代码行为显示其中一个类没有被加载(否则您将看到类重新声明错误)。可能是自动加载器首先加载file 类,然后当它找到File 的定义时,它只是假设它已经加载了该类(由于PHP 的不区分大小写的行为)。
【讨论】: