下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高新科技公司研发项目专利申请审查应对指南手册
- 新能源发电系统运行与维护方案
- 销售人员客户沟通技巧提升指导书
- 警惕网络安全守护身心健康小学主题班会课件
- 公司年度活动策划书结构内容规范指南
- 抵制不良习惯塑造美好品德小学主题班会课件
- 家庭财务管理优化执行方案手册
- 2025四川省广安市中考数学试题(原卷版)
- 2026年物联网技术助力企业数字化转型
- 2026年度供应商年度评审确认函(5篇范文)
- 材料作文:那些只盯着眼前利益的人终生难成大事凡事多看一步多考虑一点看得远才能走得远
- 2026年社会工作师考试冲刺模拟试卷
- 第12课 待人要诚信 第一课时 课件(内嵌视频) 2025-2026学年道德与法治三年级下册统编版
- 新高考英语读后续写通关讲练(第二讲):《五定十句快速定框法》教学设计
- 防水工程施工企业安全生产隐患自查自纠整改落实报告
- 2025至2030沉香木行业市场深度研究与战略咨询分析报告
- DB32T 5132.3-2025 重点人群职业健康保护行动指南 第3部分:医疗卫生人员
- 法官遴选面试题目及答案解析(2025版)
- T-CNLIC 0199-2025 穿戴甲标准规范
- 2025年湖南省工会系统招聘考试试题及答案
- 山东省企业主要负责人安全生产考试题库大全(带答案)
评论
0/150
提交评论