这是我的班级脚本:
class.php
<?php
class testing {
function hurray () {
echo "Works.";
}
}
我的调用脚本是:
test.php
<?php
include_once "class.php";
include_once "claSs.php";
$a = new testing();
$a->hurray();
当我尝试执行test.php
时php test.php
我收到以下错误:
PHP致命错误:无法在第2行的/private/var/www/temp/ClaSs.php中重新声明类测试
* Nix OS支持不区分大小写的文件系统,这意味着它了解用于引用文件名的情况。虽然说上面的脚本正在加载相同的文件,但是Mac或PHP认为它是一个不同的文件并将其加载到运行时导致上述错误。
我的问题:
其他信息:
我的Mac OS X已根据this link使用Mac OS Extended(Journaled)构建:
File System Personality: Journaled HFS+
Type (Bundle): hfs
Name (User Visible): Mac OS Extended (Journaled)
答案 0 :(得分:1)
您可以查看已经讨论该主题的here。
根据我的经验,我会回答:
答案 1 :(得分:1)
Mac OS确实将这两个文件名视为不同。
<?php
include_once "file.php";
// Prints current file and file.php
print_r(get_included_files());
include_once "file.php";
// Didn't add it more than once
print_r(get_included_files());
include_once "FILE.php";
// Prints current file, file.php and FILE.php
print_r(get_included_files());
答案 2 :(得分:0)
回答我自己的问题:
Mac OS X是否认为它是两个不同的文件?
是。 Mac配置了大小写不敏感,但它尊重大小写,所以如果你有两个包含相同的文件,但有大小写混合大小写,它会给你一个尊重案件的文件,好像它们是不同的文件,这会导致PHP加载这两个文件和第二个包括将是一次类碰撞。
PHP认为它是两个不同的文件吗?我怀疑是因为我在Windows上尝试了上述测试,它就像一个魅力。
请阅读#1的答案。
我的理解错了吗?
我的理解是正确的,但它保留了这个案例。
解决此问题的最佳方法是什么,因为我最终不会更改100个旧文件。
为避免此类错误,您需要确保不使用不同的大小写加载同一文件。