中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

深入理解PHP中的count函數
來源:易賢網 閱讀:1029 次 日期:2016-08-18 15:06:21
溫馨提示:易賢網小編為您整理了“深入理解PHP中的count函數”,方便廣大網友查閱!

在PHP編程中,在遍歷數組的時候經常需要先計算數組的長度作為循環結束的判斷條件,而在PHP里面對數組的操作是很頻繁的,因此count也算是一個常用函數,下面研究一下count函數的具體實現。

我在github上有對PHP源碼更詳細的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解。可以通過commit記錄查看已添加的注解。

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

普通對象

class User {

  private $name;

  private $address;

}

$user = 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); // 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的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的情況,即沒有繼承ArrayObject且沒有實現Countable接口。

這些類型通通返回1。

需要注意的是,如果需要計算的是對象的屬性數量,可以先將對象轉換成數組,然后調用count函數。如:

$count_value = count((array) $user);

小結

閱讀count函數的源碼過程中,在其中一步卡住了,就是if (Z_OBJ_HT_P(array)->count_elements)這一步,因為始終無法寫出進入這個分支的demo,在網上搜索了很多資料也未果,因此請教了TIPI的reeze,最終得到了想要的答案。

更多信息請查看網絡編程
易賢網手機網站地址:深入理解PHP中的count函數
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲东热激情| 久久女同互慰一区二区三区| 久久一区二区三区四区| 亚洲系列中文字幕| 欧美激情精品久久久久久久变态| 国产精品视频自拍| 欧美亚洲一级| 久久国产精品久久国产精品| 国产精品呻吟| 欧美伊人精品成人久久综合97| 欧美午夜免费电影| 亚洲综合精品一区二区| 国产麻豆91精品| 久久久久久日产精品| 国产一区二区三区日韩| 欧美顶级艳妇交换群宴| 夜夜嗨av一区二区三区免费区| 欧美精品一区在线播放| 亚洲欧美一级二级三级| 免费成人性网站| 在线欧美福利| 国产精品日韩高清| 欧美一区二区三区喷汁尤物| 国内揄拍国内精品久久| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲大胆女人| 国产一区二区日韩精品| 欧美日本亚洲| 久久一区二区三区四区| 亚洲精品一区久久久久久| 国产免费成人在线视频| 欧美韩日一区二区| 久久久精品国产免费观看同学| 欧美视频专区一二在线观看| 欧美一级欧美一级在线播放| 99pao成人国产永久免费视频| 免费视频最近日韩| 国产欧美日韩三区| 国产精品亚洲网站| 亚洲男人av电影| 午夜精品在线看| 性欧美video另类hd性玩具| 亚洲精品欧美精品| 日韩亚洲欧美精品| 狠狠久久亚洲欧美| 欧美三区美女| 国产精品任我爽爆在线播放 | 亚洲精品一区二区三区99| 亚洲欧洲免费视频| 亚洲国产美国国产综合一区二区| 亚洲成色www8888| 国产欧美日韩麻豆91| 久久在线观看视频| 欧美日本亚洲视频| 欧美日本在线播放| 蜜臀av性久久久久蜜臀aⅴ| 欧美黄色aa电影| 国产一区视频在线看| 99香蕉国产精品偷在线观看| 亚洲网友自拍| 欧美日韩aaaaa| 欧美大胆成人| 欧美性猛片xxxx免费看久爱| 欧美日韩在线视频首页| 欧美高清你懂得| 国产精品久久久91| 亚洲韩日在线| 久久躁狠狠躁夜夜爽| 欧美揉bbbbb揉bbbbb| 国产精品久久久免费| 樱桃成人精品视频在线播放| 欧美午夜一区二区三区免费大片| 国产精品激情电影| 黑人巨大精品欧美一区二区 | 国产精品久久国产精品99gif| 国产资源精品在线观看| 国产在线观看91精品一区| 欧美日韩在线视频一区| 久久久999成人| 欧美成人精品1314www| 久久成人一区| 久久久久久久欧美精品| 一本色道久久精品| 在线观看一区| 国模叶桐国产精品一区| 欧美日韩国产成人高清视频| 欧美日韩精品一区二区三区| 激情自拍一区| 久久久久久午夜| 国产欧美日本在线| 久久全球大尺度高清视频| 亚洲视频在线一区观看| 久久久久久久国产| 亚洲人成网站777色婷婷| 欧美激情一区二区三区在线视频| 最新中文字幕亚洲| 欧美色区777第一页| 99av国产精品欲麻豆| 亚洲国产mv| 国产精品综合| 性欧美暴力猛交69hd| 亚洲精品国产视频| 美女国内精品自产拍在线播放| 狠狠色狠狠色综合日日tαg| 一区二区三区欧美激情| 国产精品国产三级国产aⅴ无密码| 亚洲无毛电影| 夜夜嗨av一区二区三区网页 | 欧美精品一区二区视频| 午夜日韩在线| 国产永久精品大片wwwapp| 国产日韩欧美高清免费| 久久国产精品久久久久久久久久| 在线精品一区二区| 欧美日韩视频在线一区二区观看视频 | 欧美一区二区三区视频在线观看| 国产精品jizz在线观看美国| 欧美日本成人| 欧美三级视频在线播放| 美日韩免费视频| 欧美日韩精品中文字幕| 免费不卡在线观看av| 欧美国产日韩一区| 亚洲欧美美女| 欧美中文字幕久久| 最近中文字幕mv在线一区二区三区四区| 欧美—级高清免费播放| 亚洲欧美激情诱惑| 亚洲激情综合| 国产亚洲欧洲| 亚洲高清视频在线| 国产精品欧美一区喷水| 欧美日产在线观看| 欧美影院在线播放| 欧美一区二区三区婷婷月色| 亚洲精品在线视频| 影音先锋日韩资源| 在线观看日韩一区| 国产精品国产三级国产普通话蜜臀| 久热精品视频在线免费观看| 老司机免费视频久久| 国产精品高潮呻吟| 亚洲国产日韩在线| 久久中文字幕一区二区三区| 欧美日韩激情小视频| 欧美色123| 国产亚洲欧美色| 国产精品福利网| 亚洲日本aⅴ片在线观看香蕉| 亚洲黄色免费网站| 欧美a一区二区| 国产精品久久久久久久久久尿| 最新国产成人av网站网址麻豆| 欧美午夜片在线免费观看| 激情久久影院| 欧美日韩一区二区高清| 国产偷国产偷精品高清尤物| 亚洲精选大片| 亚洲精品一区二区三区四区高清| 亚洲春色另类小说| 欧美高清视频www夜色资源网| 国产一区二区中文| 欧美一区二区三区四区高清| 国产美女精品人人做人人爽| 久久国产精品99国产精| 最新亚洲一区| 欧美3dxxxxhd| 亚洲影音一区| 国产亚洲精品v| 欧美韩日一区二区| 欧美一区在线视频| 亚洲人成亚洲人成在线观看图片| 免费高清在线视频一区·| 韩日精品视频| 另类天堂av| 欧美1区2区视频| 欧美成人免费全部观看天天性色| 亚洲日本一区二区三区| 久久精品女人天堂| 亚洲精品欧美在线| 在线观看日韩专区| 亚洲精品日本| 在线播放豆国产99亚洲| 亚洲在线1234| 亚洲私拍自拍| 久久久人成影片一区二区三区观看| 在线观看欧美一区| 久久一区二区三区超碰国产精品| 久久青草欧美一区二区三区| 亚洲美女av电影| 99精品久久免费看蜜臀剧情介绍| 欧美在线精品一区| 欧美老女人xx| 国产在线观看91精品一区| 狠狠色香婷婷久久亚洲精品| 在线日韩视频| 亚洲欧美在线视频观看| 欧美视频中文字幕在线| 欧美精品成人| 国产精品综合不卡av|