在PHP中,能夠經過預約義函數strlen()獲取字符串的長度,那如何自定義這個函數,或者這個函數實現的原理是怎樣的呢?php
原理:當咱們獲取一個字符串時,先查看字符串中第一個字符是否是字符串的結束符,若是不是,則認爲有一個長度了,設置一個變量加1,反之,返回這個記錄長度的變量。數組
這裏有一個關鍵,就是字符串的結束標識符是什麼?咱們知道,在C中,結束符是'\0',可它不是PHP中字符串的結束標識符(究竟是什麼,我也不知道,沒查到)。這裏,咱們假設‘\0’是PHP字符串的結束標識符,則獲取字符串的長度函數則爲:函數
<?php function get_str_length($str) { $index = 0;//記錄字符串長度的變量 while($str[$index]!='\0')//用數組方式讀取字符串中字符,若是不是結束符,則長度加1 { $index++; } return $index; } ?>
然而,PHP中結束符並非'\0',因此這樣不行。spa
怎麼辦呢?能夠使用PHP的預約義函數 isset()實現。code
原理:當索引到字符串的結束位置的值時,是未定義的,返回false,其餘字符返回true。索引
好比字符串:字符串
<?php $str='hello world';//11個長度 var_dump(isset($str[11]));//返回的false,只有下標超過了字符串的長度時,才返回false,至關於沒定義這個變量 ?>
知道這個原理就簡單了:get
<?php function get_str_length($str) { $index = 0;//記錄字符串長度的變量 while(isset($str[$index]))//用數組方式讀取字符串中字符,當沒有超過字符串長度時,返回true { $index++; } return $index; } ?>
好了,這個函數就能實現預約義函數strlen()的功能啦!io
補充:isset()函數function
簡單的說,若是變量被定義了,返回true,反之,返回false。
嚴謹點,變量被定義了,而且值不是null時,返回true,反之false.
<?php $a = null;//這個變量定義了,可是值爲null var_dump($a);//返回的是false,雖然被定義了 ?>