PHP函数区分大小写吗?

Ben*_*nee 96 php function case-sensitive

我正在挖掘一些代码,我发现了一些调用mySQL_fetch_array.PHP对函数名称是否区分大小写?我记得在某处读过这篇文章,但似乎无法找到任何参考.

SIF*_*IFE 96

我引用了这个:

注意:函数名称不区分大小写,尽管调用函数通常是在声明中出现的良好形式.

因此,它看起来像用户定义的函数不区分大小写,有人投票支持PHP5下的函数/对象区分大小写.

  • 哇.那很伤心.虽然ImAgEcReAtEfRoMpNg()是混淆代码的好方法...... (12认同)
  • 哇!经过7年的编码,这真的很好找! (11认同)
  • 由于引用说"不区分大小写",为什么你说"所以它看起来像用户定义是区分大小写的"?如果这是一个错字,你真的应该修复它. (8认同)
  • PHP5已经出局,你唯一的希望是PHP6,我不认为他们会采取这一步骤.如果收益不大,它会突破很多. (3认同)
  • @Mark汤姆林我不同意.最佳做法是保持手册所具有的相同情况,因此它应该打破很少,同时增加清晰度. (3认同)

mpe*_*pen 32

没有.

PHP函数区分大小写.


Car*_*rós 19

TL; DR:类名称不区分大小写,但始终使用与声明中相同的大小写(与函数相同).此外,在定义具有不同大小写的类时可能会导致自动加载器出现问题.


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

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

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
Run Code Online (Sandbox Code Playgroud)

这输出:

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"
}
Run Code Online (Sandbox Code Playgroud)

问题是使用自动加载器和区分大小写的文件系统(如ext2/3/4),因为你必须使用相同的情况调用类名,包含类的文件被命名(而不是类名实际如何被命名),或使用strtolower:

类文件:

<?php
// filename something.php
class SomeThing {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在有了这段代码:

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
Run Code Online (Sandbox Code Playgroud)

如果你strtolower()在自动加载器代码中添加了一个调用,你就可以使这个工作(即,使用自动加载器有一个有效的不区分大小写的类名),但与函数一样,最好以与声明它相同的方式引用类,文件名与案例名称相同,使用自动加载器,忘记使用strtolower等.


ale*_*lex 7

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

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


Hab*_*wad 5

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

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }
Run Code Online (Sandbox Code Playgroud)

输出:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6
Run Code Online (Sandbox Code Playgroud)