复习PHP基础(函数)

1.自定义函数

(1).函数以function开始;
(2).function后面接空格,空格后面接函数名;
(3).语法规定如下([]代表可有可无):
function 函数名([参数名1[=值1], ......参数名n[=值n]]){
函数中的功能体;
[return 返回值;]
}
(4).函数名与变量命名规则基本一样,但是不同的是,函数名不区分大小写;
(5).所谓参数其实就是变量;
(6).函数名后括号内的参数变量是形参;
(7).函数中的具体功能一定是用{}括起来,不像if,else等流程控制可以不用大括号;
(8).函数的返回值可有可无,若有,那么返回值后的代码均不执行,除非是有条件的返回值;
(9).函数不能被定义两次,即函数不能被重载。


2.回调函数

(1).回调函数的意义:就是在处理一个功能时,我们让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数配合、协助进行处理。
(2).回调函数的定义:就是在一个函数里头调用另外一个函数,在调用函数定义时,被调用的函数以形参的方式存放在调用的函数里,作为形参,在调用的函数名后的括号里只能是变量,不能在后面加括号表明身份;在函数的功能体里就可以加括号调用了(这里就用到了PHP的可变函数)。
(3).举个例子:

function diaoyong($one, $two, $func){
    if(!is_callable($func)){ //检测变量是否为可调用的函数
        return false;
    }
    echo $one + $two + $func($one, $two);
}
function beidiaoyong($a, $b){
    $result = $a + $b;
    return $result;
}
echo diaoyong(1, 2, 'beidiaoyong');

3.变量函数

变量函数与基本语法里的可变变量类似,例:

function demo(){
    echo '1';
}
$test = 'demo';
$test();

4.匿名函数

(1).匿名函数,即没有函数名的函数,有两种方法使用匿名函数。
(2).变量函数式的匿名函数,即把一整个函数赋给一个变量,例:

$test = function($name){
    echo $name;
};
$test('XXX');

(3).回调式的匿名函数,在调用的时候直接定义被调用函数,例:

function dy($one, $two, $func){
    if(!is_callable($func)){
        return false;
    }
    echo $one + $two + func($one, $two);
}
dy(1, 2, function($a, $b){
    $result = $a + $b;
    return $result;
});

5.内部函数

定义:内部函数,是指在函数内部又声明了一个函数,例:

function a(){
    echo 'a';
    function b(){
        echo 'b';
    }
}
a();
b();

注意:1.内部函数名不能是已存在的函数名;2.假设在函数a里定义了一个内部函数,不能调用两次函数a;3.调用内部函数b之前,要先调用a函数。


6.全局变量$GLOBALS

(1).通过$GLOBALS来读取外部变量,例:

$a = 1;
function test(){
    $b = 2;
    $result = $b + $GLOBALS['a'];
    return $result;
}
echo test();

(2).通过$GLOBALS,在函数内修改外部变量,例:

$a = 1;
function test(){
    $GLOBALS['a'] = 2;
}
test();
echo $a;

(3).通过$GLOBALS,在函数内创建全局变量,例:

function test(){
    $GLOBALS['a'] = 1;
}
test();
echo $a;

(4).可用global $变量1,变量2,......,变量n声明全局变量。


7.参数的引用

参数的引用,就是将形参和实参指向同一位置,当形参在函数体内发生变化,那么实参的值也发生变化,举个例子:

$a = 1;
function test(&$n){
    $n = 10;
}
test($a);
echo $a; //会发现$a的值变为10

8.递归函数

在函数体内调用函数自己,例:

$n = 5;
function test($n){
    echo $n;
    $n = $n - 1;
    if($n > 0){
        test($n);
    }
}
test($n);  //结果将是54321

注意:递归函数必须要有能执行完的结束条件,不然函数就会陷入死循环。


9.静态变量static

在函数内声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行,可用来计算函数被调用的次数。举个例子:

function test(){
    static $a = 1;
    echo $a;
    $a++;
}
for($i = 0; $i < 10; $i++){
    test(); //结果为123456789
}

10.系统内置函数

主要看手册


11.文件包含函数

函数 包含失败
include 返回一条警告,但代码继续向下执行,常用于动态包含
require 发出致命错误,代码就不会继续向下执行了
include_once 返回一条警告,除了原有功能外,还会做once检测,即文件不会被包含两次以上
require_once 发出致命错误,除了原有功能外,还会做once检测

注意,少用带_once的函数,因为它会消耗更多的资源去做检测。


12.数学常用函数

函数 描述 实例 输入 输出
abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字
ceil() 进一法取整 echo ceil(9.999); // 10 浮点数 进一取整
floor() 舍去法取整 echo floor(9.999); // 9 浮点数 直接舍去小数部分
fmod() 浮点数取余 "x = 5.7;y = 1.3;r = fmod(x, y);//r equals 0.5, because 4 * 1.3 + 0.5 = 5.7" 两个浮点数,x>y 浮点余数
pow() 返回数的n次方 echo pow(-1, 20); // 1 基础数 n次方 乘方值
round() 浮点数四舍五入 echo round(1.95583, 2);// 1.96 一个数值保留小数点后多少位,默认为0 舍入后的结果
sqrt() 求平方根 echo sqrt(9); //3 被开方的数 平方根
max() 求最大值 echo max(1, 3, 5, 6, 7); // 7 echo max(array(2, 4, 5)); // 5 多个数字或数组 返回其中的最大值
min() 求最小值 echo min(1, 3, 5, 6, 7); // 1 echo min(array(2, 4, 5)); // 2 多个数字或数组 返回其中的最小值
mt_rand() 更好的随机数 echo mt_rand(0,9);//n 最小/最大,随机数 随机返回范围内的值
rand() 随机数 echo rand() 最小/最大,随机数 随机返回范围内的值
pi() 获取圆周率值 echo pi(); // 3.1415926535898 获取圆周率

13.获取时间信息函数

(1).首先要知道时区、世界时和unix时间戳的概念:
时区:全球划分有24个时区,中国北京所在地东八区的时间为全国统一使用时间;
世界时:全球统一的记录时间标准,即格林尼治(英国某地)时间(GMT)
unix时间戳:由于电脑本身不认识时间,所以设置了一个时间方便运算,从unix纪元(1970年1月1日0时)开始到某个时间经过的秒数就叫做unix时间戳。
(2).设置时区的函数为:
date_default_timezone_get()——取地默认时区,用法如下:

echo date_default_timezone_get();

date_default_timezone_set()——设置默认时区,用法如下:

define('TIME_ZONE','Asia/shanghai'); //合法时区参考手册
date_default_timezone_set(TIME_ZONE);
echo date('Y-m-d H:i:s');

(3).time()获取当前的unix时间戳,例:

$time = time();
echo $time;

(4).可用date('Y-m-d H:i:s')显示当前日期时间(date函数里面的时间参数格式还有很多,具体使用时可以上网查)。
(5).可用getdate()获取当前系统时间,该函数会返回当前时间的详细信息的数组,可以好好利用该函数做时间信息的汇报。
(6).可用checkdate(月,日,年)判断一个输出的日期是否有效,例:

var_dump(checkdate(2,29,2020));

(7).可用mktime(时,分,秒,月,日,年)构造某天的时间戳。
(8).程序执行时间检测,可用microtime(可传入true得到浮点类型的时间),例:

$start = microtime(true);
for($i = 0; $i < 10000; $i++){}
$end = microtime(true);
$time = $end - $start;
echo $time;

14.字符串常用函数

真的很多,我是没背的,但是有一次面试被问到了emmmm

函数 描述 实例
trim() 删除字符串两端的空格或其他预定义字符 $str = "\r\nHello World!\r\n"; echo trim($str);
rtrim() 删除字符串右边的空格或其他预定义字符 $str = "Hello World!\n\n"; echo rtrim($str);
chop() rtrim()的别名 同上
ltrim() 删除字符串左边的空格或其他预定义字符 $str = "\r\nHello World!"; echo ltrim($str);
dirname() 回路径中的目录部分 echo dirname("c:/testweb/home.php");
str_pad() 把字符串填充为指定的长度 $str = "Hello World"; echo str_pad($str,20,".");
str_repeat() 重复使用指定字符串 echo str_repeat(".",13);
str_split() 把字符串分割到数组中 print_r(str_split("Hello"));
strrev() 反转字符串 echo strrev("Hello World!");
wordwrap() 按照指定长度对字符串进行折行处理 $str = ""An example on a long word is: Supercalifragulistic""; echo wordwrap($str,15);
str_shuffle() 随机地打乱字符串中所有字符 echo str_shuffle("Hello World");
parse_str() 将字符串解析成变量 parse_str("id=23&name=John%20Adams",$myArray); print_r($myArray);
number_format() 通过千位分组来格式化数字 "echo number_format("1000000"); echo number_format("1000000",2); echo number_format("1000000",2,"","",""."");"
strtolower() 字符串转为小写 echo strtolower("Hello WORLD!");
strtoupper() 字符串转为大写 echo strtoupper("Hello WORLD!");
ucfirst() 字符串首字母大写 echo ucfirst("hello world");
ucwords() 字符串每个单词首字符转为大写 echo ucwords("hello world");
htmlentities() 把字符转为HTML实体 $str = ""John & 'Adams'""; echo htmlentities($str, ENT_COMPAT);
htmlspecialchars() 预定义字符转html编码
nl2br() \n转义为标签 echo nl2br("One line.\nAnother line.");
strip_tags() 剥去 HTML、XML 以及 PHP 的标签 echo strip_tags("Hello world!");
addcslashes() 在指定的字符前添加反斜线转义字符串中字符 $str = ""Hello, my name is John Adams." echo $str; echo addcslashes($str,'m');
stripcslashes() 删除由addcslashes()添加的反斜线 echo stripcslashes("Hello, \my na\me is Kai Ji\m.");
addslashes() 指定预定义字符前添加反斜线 $str = "Who's John Adams?";echo addslashes($str);
stripslashes() 删除由addslashes()添加的转义字符 echo stripslashes("Who's John Adams?");
quotemeta() 在字符串中某些预定义的字符前添加反斜线 $str = "Hello world. (can you hear me?)"; echo quotemeta($str);
chr() 从指定的 ASCII 值返回字符 echo chr(052);
ord() 返回字符串第一个字符的 ASCII值 echo ord("hello");
strcasecmp() 不区分大小写比较两字符串 echo strcasecmp("Hello world!","HELLO WORLD!");
strcmp() 区分大小写比较两字符串
strncmp() 比较字符串前n个字符,区分大小写
strncasecmp() 比较字符串前n个字符,不区分大小写 int strncasecmp ( string $str1 , string $str2 , int $len )
strnatcmp() 自然顺序法比较字符串长度,区分大小写 int strnatcmp ( string $str1 , string $str2 )
strnatcasecmp() 自然顺序法比较字符串长度,不区分大小写 int strnatcasecmp ( string $str1 , string $str2 )
chunk_split() 将字符串分成小块 str chunk_split(str $body[,int $len[,str $end]])
strtok() 切开字符串 str strtok(str $str,str $token)
explode() 使用一个字符串为标志分割另一个字符串 array explode(str $sep,str $str[,int $limit])
implode() 同join,将数组值用预订字符连接成字符串 string implode ( string $glue , array $pieces )
substr() 截取字符串 string substr ( string $string , int $start [, int $length ] )
str_replace() 字符串替换操作,区分大小写 mix str_replace(mix $search,,mix $replace,mix $subject[,int &$num])
str_ireplace() 字符串替换操作,不区分大小写 mix str_ireplace ( mix $search , mix $replace , mix $subject [, int &$count ] )
substr_count() 统计一个字符串,在另一个字符串中出现次数 int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] )
substr_replace() 替换字符串中某串为另一个字符串 mixed substr_replace ( mixed $string , string $replacement , int $start [, int $length ] )
similar_text() 返回两字符串相同字符的数量 int similar_text(str $str1,str $str2)
strchr() 返回一个字符串在另一个字符串中开始位置到结束的字符串 string strstr ( string $str, string $needle , bool $before_needle )
strrchr() 返回一个字符串在另一个字符串中最后一次出现位置开始到末尾的字符串 string strrchr ( string $haystack , mixed $needle )
stristr() 返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写 string stristr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
strtr() 转换字符串中的某些字符 string strtr ( string $str , string $from , string $to )
strpos() 寻找字符串中某字符最先出现的位置 int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
stripos() 寻找字符串中某字符最先出现的位置,不区分大小写 int stripos ( string $haystack , string $needle [, int $offset ] )
strrpos() 寻找某字符串中某字符最后出现的位置 int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
strripos() 寻找某字符串中某字符最后出现的位置,不区分大小写 int strripos ( string $haystack , string $needle [, int $offset ] )
strspn() 返回字符串中首次符合mask的子字符串长度 int strspn ( string $str1 , string $str2 [, int $start [, int $length ]] )
strcspn() 返回字符串中不符合mask的字符串的长度 int strcspn ( string $str1 , string $str2 [, int $start [, int $length ]] )
str_word_count() 统计字符串含有的单词数 mix str_word_count(str $str,[])
strlen() 统计字符串长度 int strlen(str $str)
count_chars() 统计字符串中所有字母出现次数(0..255) mixed count_chars ( string $string [, int $mode ] )
md5() 字符串md5编码 $str = "Hello"; echo md5($str)
mb_substr 获取字符串的部分 string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
mb_http_output 设置/获取 HTTP 输出字符编码 mixed mb_http_output ([ string $encoding = mb_http_output() ] )
mb_strlen 获取字符串的长度 mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
iconv 字符串按要求的字符编码来转换 string iconv ( string $in_charset , string $out_charset , string $str )
iconv_substr 截取字符串的部分
iconv_get_encoding 获取 iconv 扩展的内部配置变量
mb_substr_count 统计字符串出现的次数
mb_check_encoding 检查字符串在指定的编码里是否有效
mb_strrpos 查找字符串在一个字符串中最后出现的位置
mb_split 使用正则表达式分割多字节字符串
parse_url 解释URL成为一个数组

注:mb_* 和iconv_* 他们可以处理多字节字符,例如:中文。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容