类名 PHP 中的大写字母
Posted
技术标签:
【中文标题】类名 PHP 中的大写字母【英文标题】:Capital letters in class name PHP 【发布时间】:2011-07-12 17:21:05 【问题描述】:我的系统中有两个类。一个叫做文件,第二个是文件。 在我的本地主机上,当我实例化文件时,我得到了文件对象,但是我的朋友运行相同的脚本得到了文件的对象,就像大写字母无法识别并且“文件”等于“文件”一样。 这是一些可配置的东西吗? 我们都在 Windows 上运行。我有 WampServer,他有 XAMPP。
【问题讨论】:
你真的不应该这样混用名字 【参考方案1】:php 对类命名不区分大小写。这意味着即使课程名称为File
,您也可以正常使用$file = new file()
,反之亦然。
您是否有机会依赖类文件的自动加载?如果是这种情况,则可能取决于计算机,解释器并不总是首先找到相同的文件。这将解释问题。
我强烈建议您重命名您的课程。依靠大小写来区分两个不同的事物总是一个坏主意,按照惯例,类名总是以大写字母开头。
如果不能改类名,建议看看php namespaces。
【讨论】:
但是在区分大小写的文件系统上的自动加载器将找不到您的类以不同的大小写拼写。 我的课程不以大写字母开头......从来没有,永远不会 @dsdsdsdsd - Y,为什么要符合所有标准?【参考方案2】: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
【讨论】:
这并不能解释为什么他使用相同的代码加载一个类而他的朋友加载另一个类。 你是对的。扩展答案以表明如果在一个脚本中需要两个类(“文件”和“文件”),则这样的代码不应该一起工作。但是根据提供的信息,我无法猜测他正在经历什么,只是表明它根本不应该工作 如果使用类加载器,您可以在其中拥有两个具有相同类名的文件,并且取决于类加载器,它可以工作。但这只会导致巨大的问题;)【参考方案3】:我猜你正在对类文件使用某种延迟加载,可能是你在 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 的不区分大小写的行为)。
【讨论】:
以上是关于类名 PHP 中的大写字母的主要内容,如果未能解决你的问题,请参考以下文章