PHP中变量名或函数名的长度是否有限制?

50

如果我想要写一个非常长的变量名,例如:

$this_is_my_variable_that_does_something_in_the_following_function_and_provides_some_information_with_which_the_function_relies_upon_to_do_all_the_work_it_needs = null;

那样行吗?对于函数/方法名称的同样问题。


14
你应该使用驼峰命名法,否则很难阅读。 - Parris Varney
30
@PMV: $thisIsMyVariableThatDoesSomethingInTheFollowingFunctionAndProvidesSomeInformationWith WhichTheFunctionReliesUponToDoAllTheWorkItNeeds = null; 这看起来很容易阅读。我可以一口气说出来! *深呼吸* - BoltClock
2
@BoltClock:可能连NULL也要大写,因为它是一个常量。这样语句就会非常易读和合理。只可惜标点符号不被允许。 - Parris Varney
@PMV:是的,我忘记了。我在我的代码中总是将它大写。 - BoltClock
1
一个好问题,但对于你自己来说很容易回答。你试过了吗? - HappyDog
由于PHP没有定义任何限制,我更喜欢使用ANSI标准,它将变量名的长度识别为31个字符。然而,变量名的长度通常不应超过八个字母、数字和下划线的任意组合。 - Amitesh Bharti
6个回答

246

通常,这种限制是由与您的代码交互的其他人威胁暴力所导致的。


9
我刚刚读了你的解释,笑得很开心。如果你的代码只使用单个字母变量(如 $i$n$k),经常会发生完全相同的事情。 - Jocelyn
所以, if (strlen($varname) < 4 || strlen($varname) > 16) { SKINNERRRRRR(!!!!!1); } - thomasrutter
2
@RobinJ 根据发布用户的选择,就像站点上所有其他被接受的答案一样。在我看来,这也是一个完全准确的答案-技术限制并不是唯一的限制。而且,它已经五年了...为什么现在才问呢? - ceejayoz

99

根据文档

PHP中变量名遵循与其他标签相同的规则。有效的变量名以字母或下划线开头,后跟任意数量的字母、数字或下划线。

函数名也是如此,根据这里所述。


只要通知被关闭,一行写200个下划线(以及末尾的分号)是完全有效的!是时候介绍我的新分隔符了 :) - dkellner
我更喜欢遵循ANSI建议,因为毕竟PHP是用C语言编写的(变量名长度不超过31个字符)。 - Amitesh Bharti

18

变量/函数/方法/类名称长度的限制不存在。

上面的评论指出,不应滥用这个属性。只有在涉及人类可读/易于维护的代码时才是真实的。

然而,这是 PHP 的极其有用的功能,在许多非常流行的项目中得到了很好的利用,例如 Twig,它生成类,例如(代码片段):

class __TwigTemplate_9601167421099bbb502d119e674fed3fb71769eef256903648c9c2b4b6faa436 extends \Twig_Template {

    protected function doDisplay(array $context, array $blocks = array())
    {
        $__internal_0abebc74dd811fd7b4cfa4c6a2fdf870d7723c04e8daf6926b04914d6644935f = $this->env->getExtension("native_profiler");    
    }

}

在我的项目中,我也有机会从同样的属性中受益。

总结:

  • 变量/函数/类名长度没有限制
  • 这是一种非常有用的语言特性
  • 当然,它需要在适当的上下文中使用,不适用于日常工作

你确定“变量/函数/类名长度没有限制”吗?你有任何参考资料吗? - Amranur Rahman

3

没有限制 - 但是这样做不建议,因为它会产生难以阅读的代码...


2
相反,它确实创建了非常易读的代码。 $arrivalDateTimeWithUnknownTimeZoneAndIncorrectlyAssignedUtcTimeZone(我们生产代码中的真实示例)比$arrivalDateTime更具表现力。原因:在第二个变量中,人类阅读您的代码将不得不询问您是否存在错误,因为它具有UTC时区,而实际上时区是未知的。在第一种情况下,很明显这是故意的。 - Xavi Montero
4
这会使代码难以阅读,也会让输入代码变得更加困难。注释的存在是有原因的,请不要把所有信息都放在变量名中。 - brianush1
1
另一方面,注释更难维护。当您在变量的名称中具有其原因时,它会使生活更轻松。实际上,阅读长变量比总是去定义并阅读注释需要更少的时间。 - Mateus Viccari
使用大变量/函数名称的风险在于可能会拼错单词;例如,在繁重的编程日中忘记了 "double-r" 或大写字母 "Z" 在 "$arrivalDateTimeWithUnknownTimeZoneAndIncorrectlyAssignedUtcTimeZone" 中,这时尝试去找错误就会是一件非常困难的事情。如果您需要在数百行代码中传递这种变量,我建议您通过代码来描述它,例如:"$arrivalDateTime = array("timestamp" => 3213546, "timeZone" => false, "assignedUTC" => false);" - Geo Halkiadakis

3

PHP没有对标识符的长度设置限制。

话虽如此,我不确定为什么有人会想要创建一个长达160个字符的变量名。我希望这只是一个假设性的问题。


3
我在考虑编写一个框架/编码标准,它不使用注释,而是依赖于使用非常描述性的变量和函数名称 =P - james
12
你应该将其命名为不使用注释,而是依靠使用非常描述性的变量和函数名称的框架/编码标准。CMS - ceejayoz
呃,所以你希望一个冗长的变量名可以替代解释为什么有人做了一些奇怪的事情的注释?祝你好运。 - Brian Clapper
也许这只是动态的标识符而已 ;) - Thiago Macedo
存在一个使用情境 - 自动生成的变量/类/函数。 - Nikola Svitlica
不是160,而是我真正的生产代码:$arrivalDateTimeWithUnknownTimeZoneAndIncorrectlyAssignedUtcTimeZone。为@ceejayoz和清晰的代码规则加1分! - Xavi Montero

-3

PHP对变量名没有任何限制。我的建议是,变量名必须包含你将要存储的数据的定义。


3
您在将近9年后回答了一个问题,但未提供任何新的观点。请考虑只有当您能够提供不同的解决方案/答案时才回答旧问题。 - MAChitgarha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接