为什么处理二进制数据的函数没有长度参数?我有C语言背景,所以这真的让我很困惑。我认为也许字符串对象持有的长度,但这似乎不是这样的情况(纠正我,如果我错了)。显示此行为的两个函数示例是base64_encode/decode和bin2hex。
谢谢!
php的字符串对象内部保存长度。您可以通过调用strlen
来获得这个值,但是由于php具有自动管理功能,因此您很少需要担心这个问题:
echo strlen("a b c"); // 5
PHP字符串不像c字符串。
我已经有一段时间没有考虑内部结构了。我记得,php变量被称为"zvals",它基本上是一个跟踪数据类型、长度和数据本身等内容的结构体。
因此在内部(至少在相当低的层次上),PHP可能会避免依赖于null终止来知道字符串的结束位置。
编辑:这是一篇旧文章,讨论了PHP中用户空间变量的一些内部实现