【问题标题】:PHP String Length Without strlen()没有 strlen() 的 PHP 字符串长度
【发布时间】:2011-05-08 21:34:51
【问题描述】:

刚刚浏览了最新版本的 PHP 编码标准,有些东西引起了我的注意:

http://svn.php.net/viewvc/php/php-src/trunk/CODING_STANDARDS?revision=296679&view=markup

编码标准 #4 规定“在编写处理字符串的函数时,请务必记住 PHP 拥有每个字符串的长度属性,并且不应使用 strlen() 来计算...”

我一直用strlen,也许是晚了,但是如何访问PHP中字符串的内置长度属性?

【问题讨论】:

    标签: php coding-style strlen php-internals


    【解决方案1】:

    他们在谈论C function,而不是 PHP 函数。 C 函数将在第一个 \0 之后停止计数,但 PHP 字符串可以在结尾以外的其他位置包含 \0

    【讨论】:

    • 该死,你为什么要编辑?以为我也可以添加其他东西。哦,好吧,有一个 +1 :)
    • 在我看来,这个建议是专门针对 PHP... 序言指出“该文件列出了任何程序员在 PHP 中添加或更改代码时都应遵循的几个标准。”然后将其列为其中之一,直到在语法部分的进一步下方才提及C……并且他们特别提到不要在PHP中使用strlen。奇怪。
    • 在挖掘PHP源代码后,您确实是对的,看来他们指的是C函数。
    【解决方案2】:

    明确提到他们谈论的是 PHP 编码标准,而不是 C 函数或 PHP 引擎的扩展。

    =========================
    PHP 编码标准
    ============== ==========
    该文件列出了任何程序员添加或更改的几个标准 PHP中的代码,应该遵循。由于这个文件是在很晚的时候添加的 PHP v3.0 的开发阶段,代码库(尚未)完全 跟随它,但它正朝着那个大方向前进。既然我们现在 进入第 4 版,许多部分已重新编码以供使用 这些规则。

    我仍然没有找到任何关于字符串长度属性的相关信息,但我认为如果它与新版本的 PHP 相关,他们将来可能会发布这些信息。

    如果有人发现有关此的有用信息,请发布。

    【讨论】:

      【解决方案3】:

      要获取字符串 zval(C 中的变量)的长度,请使用 Z_STRLEN(your_zval) 请参阅第 398 行的 zend_operators.h (PHP 5.4):

      #define Z_STRLEN(zval)          (zval).value.str.len
      

      【讨论】:

        猜你喜欢
        • 2015-10-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-25
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        相关资源
        最近更新 更多