PHP源码阅读:count函数.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PHP源码阅读:count函数

在PHP 编程中,在遍历数组的时候经常需要先计算数组的长度作为循环结束的 判断条件,而在PHP 里面对数组的操作是很频繁的,因此count 也算是一个常 用函数,下面研究一下count 函数的具体实现。 count int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ) count 函数计算数组或者对象里面的所有元素个数。 对于对象来说,如果你安装了SPL 扩展,可以通过实现Countable 接口来调用 count 函数。Countable 接口有且仅有一个方法Countable::count(),该方法的返 回count()函数的返回值。 参数说明 mode 如果参数mode 设为COUNT_RECURSIVE(或1),count()会递归地计算该数组。 在计算多维数组的时候特别有用。 如果第一个参数不是数组或者实现Countable 接口的对象,count 函数将返回1。 注意:count 函数可以检测递归避免无限循环,但会在遇到无限递归或得到比期 望值大的时候返回E_WARNING 提示。 运行示例 普通应用 $arr1 = array(1,2,3,4,5); $val1 = count($arr1);// 5 多维数组 $arr2 = array(apple,banana,array(cat,camel),dog); $val2_1 = count($arr2);// 4 $val2_2 = count($arr2,1);// 6 数字和字符串 $str = hello world; $int_val = 1; $val3 = count($str);// 1 $val4 = count($int_val);// 1 普通对象 classUser{ private$name; private$address; } $user = newUser(); $val5 = count($user);// 1 $val6 = count((array)$user);// 2 array-like 对象 classUserextendsArrayObject{ private$name; publicfunction__construct(){ $this-name = hhq; } publicfunctiongetName(){ return$this-name; } publicfunctioncount(){ return2; } } $user2 = newUser(); $val7 = count($user2);// 2 实现Countable 接口对象 classUserimplementsCountable{ publicfunctioncount(){ return3; } } $user3 = newUser(); $val8 = count($user3);// 3 运行步骤 进入switch 语句检测参数类型 如果是NULL,直接返回0 如果是数组,调用php_count_recursive 函数机选数组元素个数 如果是对象,先检查是否为数组对象(array-like object),如果是,则计算数组 对象的数量 否则,如果对象实现了Countable 接口,则调用Countable 的count 方法 最后,其他类型比如整型数组或字符串,都返回1。 源码解读 如果是普通数组,count 函数会调用php_count_recursive 函数实现其功能的运 行步骤如下: 如果当前hash Bucket 被递归访问的次数大于1,说明重复递归,染回 E_WARNING 错误 否则计算当前数组层数的数组元素个数 如果有递归参数选项,则继续递归访问 如果参数是对象类型,实现时会先判断handler 是否被定义。而handler 是PHP 内核中对象的结构体,其中包含有count_elements 字段,实际上是一个函数。 如果某个对象表现得想数组一样,即通常说的array-like object,那么就会执行 count_elements 函数。具体实现是类继承PHP 的ArrayObject ,并在类里面实 现count 函数,具体调用的就是count 函数,如果类没有实现count 函数,则count 返回0,否则返回对象的count 函数的返回值。 如果是其他的数据类型 1、字符串 2、数字 3、对象分支中两个if 判断都为false 的情况,即没有继

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档