深化理解PHP中的count函数__第1页
深化理解PHP中的count函数__第2页
深化理解PHP中的count函数__第3页
深化理解PHP中的count函数__第4页
深化理解PHP中的count函数__第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深化理解PHP中的count函数_ 在PHP编程中,在遍历数组的时候常常需要先计算数组的长度作为循环结束的推断条件,而在PHP里面对数组的操作是很常见的,因此count也算是一个常用函数,下面讨论一下count函数的具体实现。 我在github上有对PHP源码更具体的注解。感爱好的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。 count int count ( mixed $array_or_countable , int $mode = COUNT_NORMAL ) count函数计算数组或者对象里面的全部元素个数。 对于对象来说,假如你安装了

2、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

3、, 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 一般对象 class User private $name; private $address; $user

4、= new User(); $val5 = count($user); / 1 $val6 = count(array) $user); / 2 array-like对象 class User extends ArrayObject private $name; public function _construct() $this-name = hhq; public function getName() return $this-name; public function count() return 2; $user2 = new User(); $val7 = count($user2)

5、; / 2 实现Countable接口对象 class User implements Countable public function count() return 3; $user3 = new User(); $val8 = count($user3); / 3 运行步骤 进入switch语句检测参数类型 假如是NULL,挺直返回0 假如是数组,调用php_count_recursive函数机选数组元素个数 假如是对象,先检查是否为数组对象(array-like object),假如是,则计算数组对象的数量 否则,假如对象实现了Countable接口,则调用Countable的coun

6、t方法 最终,其他类型比如整型数组或字符串,都返回1。 源码解读 假如是一般数组,count函数会调用php_count_recursive函数实现其功能的运行步骤如下: 假如当前hash Bucket被递归访问的次数大于1,说明重复递归,染回E_WARNING错误 否则计算当前数组层数的数组元素个数 假如有递归参数选项,则连续递归访问 假如参数是对象类型,实现时会先推断handler是否被定义。而handler是PHP内核中对象的结构体,其中包含有count_elements字段,事实上是一个函数。假如某个对象表现得想数组一样,即通常说的array-like object,那么就会执行cou

7、nt_elements函数。具体实现是类继承PHP的ArrayObject,并在类里面实现count函数,具体调用的就是count函数,假如类没有实现count函数,则count返回0,否则返回对象的count函数的返回值。 假如是其他的数据类型 1、字符串 2、数字 3、对象分支中两个if推断都为false的状况,即没有继承ArrayObject且没有实现Countable接口。 这些类型通通返回1。 需要留意的是,假如需要计算的是对象的属性数量,可以先将对象转换成数组,然后调用count函数。如: $count_value = count(array) $user); 小结 阅读count函数的源码过程中,在其中一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论