21

我的系统中有两个类。一个叫做文件,第二个是文件。在我的本地主机上,当我实例化文件时,我得到了文件对象,但是我的朋友运行相同的脚本得到了文件的对象,就像大写字母无法识别并且“文件”等于“文件”一样。这是一些可配置的东西吗?我们都在 Windows 上运行。我有 WampServer,他有 XAMPP。

4

3 回答 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 回答