Ben*_*nee 96 php function case-sensitive
我正在挖掘一些代码,我发现了一些调用mySQL_fetch_array
.PHP对函数名称是否区分大小写?我记得在某处读过这篇文章,但似乎无法找到任何参考.
SIF*_*IFE 96
我引用了这个:
注意:函数名称不区分大小写,尽管调用函数通常是在声明中出现的良好形式.
因此,它看起来像用户定义的函数不区分大小写,有人投票支持PHP5下的函数/对象区分大小写.
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
等.
并且方法名称也不区分大小写。例如:-
<?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)