PHP函数是否区分大小写?


100

我正在研究一些代码,并找到了对的调用mySQL_fetch_array。PHP对函数名称是否区分大小写?我记得在某处读过这篇文章,但似乎找不到任何参考。


1
不,他们似乎并非如此。偏好通常是小写
Jason

3
stackoverflow.com/questions/2749781/…重复。不,功能不区分大小写
Bob Baddeley

供参考:它埋在此处的php.net/manual/en/functions.user-defined.php中的Note:块中。
mario

3
我投票决定不公开此标题-该标题更为笼统和明确,因此可能会帮助更多的人。
coreyward

Answers:


100

我从这里引用:

注意:函数名称不区分大小写,尽管调用函数通常是一种很好的形式,因为它们出现在声明中。

因此,它看起来像用户定义的函数不区分大小写,因此投票赞成在PHP5下区分函数/对象区分大小写。


3
PHP5已经淘汰,您唯一的希望是PHP6,我认为他们不会采取这一步骤。它会破裂,但收效甚微。
马克汤姆林

3
@马克·汤姆林我不同意。最佳实践是保持与手册相同的情况,因此,在提高清晰度的同时,应该不会造成太大的损坏。
Ben Dauphinee

12
哇。真可悲。尽管ImAgEcReAtEfRoMpNg()是混淆代码的好方法……
Pontomedon

8
既然引号说“不区分大小写”,那么为什么要说“看起来用户定义是区分大小写的”?如果那是一个错字,那么您真的应该解决它。
Barmar 2013年

11
哇!经过7年的编码,这真是太好了!
大安2014年

34

没有。

PHP函数区分大小写。


19

TL; DR:类名不区分大小写,但始终使用与声明中相同的大小写(与函数相同)。同样,实例化定义的大小写不同的类可能会导致自动加载器出现问题。


另外,类名不区分大小写:

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

输出:

class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}

问题是使用自动加载器和区分大小写的文件系统(例如ext2 / 3/4),因为您必须以相同的大小写调用包含类的文件的类名(而不是实际区分类名的方式),或使用strtolower

类文件:

<?php
// filename something.php
class SomeThing {
   ...
}

自动装带器功能(__autoload或要注册的功能spl_autoload_register

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

现在使用以下代码:

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

如果您strtolower()在自动加载器代码中添加了对的调用,则可以完成这项工作(即使用自动加载器有效地区分大小写的类名),但是与函数一样,最好以与声明类相同的方式引用一个类,具有与类名相同的文件名,使用自动加载器,而忘记使用strtolower等。


7

不,它们区分大小写,但是,为了保持一致性,您应该始终使用手册中的大小写。

然而,变量区分大小写的。


3

在PHP中,变量区分大小写,但函数没有这样的问题。您可以使用以下语句显示输出,所有语句都将显示相同的结果。

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

另一方面,如果您要更改变量的区分大小写,则会显示错误。

例:

<?php
$a=5;
echo $A;// It will show the error.
?>

输出:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3

2

方法名称也不区分大小写。例如:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

输出:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

1

最后大家的回应。即使PHP并不需要在所有实例中都保持字符大小写一致,甚至到目前为止在PHP5中。

最佳做法是

当引用回变量(强制性)或函数(可选,但建议)时,总是使用相同的情况。

您可能永远不会知道有一天投票会通过,而您将免去几年前在PHP中需要更新的应用程序中不断变化的案例的整个噩梦。

希望它能有所帮助。


关于“节省更改案例的整个噩梦”:不,我的理解是,如果进行更改,则可以在php.ini中设置是否区分大小写。因此,保留了向后兼容性。
制造商史蒂夫(Steve)2014年

-2

可能为时已晚,但是...

每个人都已经知道:PHP引擎并不关心字母的大小写。

并且对PHP Bugtracker进行了投票,多数人说:“是的,我是专业案例专家。”

但是我很反对,因为在我的MVC框架中,我将控制器动作称为:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ controller和$ action照原样从URL中获取。

想一想,如果用户发布了指向我网站的链接: https:// my-site / MyPartnerController / MyPartnerGallery

而类名为myPartnerController ...

这意味着,如果PHP的类和函数名称区分大小写,则没有人会获得此页面。

是的,我总是在声明的代码中使用所有名称。但我祈祷他们永远不要使函数和类的名称区分大小写。

谢谢!


1
真的很糟糕...如果我要访问my-site / myLogInPage / loginsuccess,并对您将要使用的登录成功功能进行一些猜测,或者可以擦除一些内容...。
Tschallacka
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.