在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,虽然被定义了 ?>