自定義PHP中獲取字符串長度函數

在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,雖然被定義了
?>
相關文章
相關標籤/搜索