PHP函数是否区分大小写?
我正在挖掘一些代码,并且发现了一些对mySQL_fetch_array
调用。 PHP对函数名称是否区分大小写? 我记得在某处读过这篇文章,但似乎无法find任何参考。
我从这引用:
注意:函数名是不区分大小写的,尽pipe调用函数的声明通常是很好的forms。
所以,它看起来像用户定义的函数是不区分大小写的,有一个投票权让PHP5下的函数/对象区分大小写。
没有。
PHP函数不区分大小写。
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 { ... }
自动加载器function( __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
和喜欢。
不,他们不区分大小写,但是,您应该始终使用手册中的案例来保持一致性。
但是,variables是区分大小写的。
在PHP中,variables是区分大小写的,但函数没有这样的问题。你可以使用下面的语句来显示输出,所有的都会显示相同的结果。
<?php Echo "This is a test script"; ECHO "This is a test script"; echo "This is a test script"; ?>
另一方面,如果您要更改variables的区分大小写,那么它将显示错误。
例:
<?php $a=5; echo $A;// It will show the error. ?>
输出:
Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
方法名称也不区分大小写。 例如:-
<?php class C { public function method() { } public function METHOD() { } }
输出:
PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6
总结每个人的回应。 尽pipePHP在所有情况下都不需要字符大小写一致性,即使在PHP5中也是如此。
最好的做法是
当参考variables(它的强制性)或函数(它的可选,但是推荐)时总是使用相同的情况。
你永远也不会知道,也许有一天投票通过,你将保存几年前在你的PHP应用程序需要更新的应用程序变化案件的整个噩梦。
希望它有助于无论如何。
可能是为时已晚,但…
大家已经知道这里了:PHP引擎不关心字母的情况。
还有就是PHP bugtracker的投票,大部分都是这样说的:“是的,我是亲例子。
但是我反对,因为在我的MVC框架中,我打电话给控制器操作:
$currentController = new $controller($parameters); $currentAction = $currentController->{$action}();
$控制器和$动作是从URL原样。
想想,如果用户发布了一个链接到我的网站: https://我的网站/ MyPartnerController / MyPartnerGallery
而类被命名为myPartnerController …
这意味着如果PHP的类和函数名称区分大小写,那么没有人会获得这个页面。
是的,我总是使用声明中的所有代码名称。 但是我祈祷他们永远不要让function和类名称区分大小写。
谢谢!