PHP-函数

PHP函数分为自定义函数系统函数 (o゚v゚)ノ


PHP 函数



一. 自定义函数

1.1 自定义函数函数基本概念

我们在实际开发过程当中需要有很多功能都需要反复使用到,而这些反复需要使用到的功能,我们能定义成功能(函数),就尽可能定义成功能(函数)。使用的时候,吼一下它的名字即可。
那我们来学一下自定义函数的语法规定,语法规定如下:

function 函数名([参数名1[=值1], 参数名2[=值2], 参数名n[=值n]])
{
函数中的功能体
[return 返回值]
}

上面的语法规定中发现了如下特点,产生如下语未能规定:
1. 函数以function开始
2. function后面接空格,空格后接函数名
3. 函数名与变量命名规则基本一样,但是不同的是:函数名不区分大小写
4. 所谓参数其实就是变量
5. 函数名后接括号,括号内跟参数,参数全都有[](中括号)括起来了,代表参数可填可不填
6. 如果有参数的话,参数后可以接(=)等号,等号接默认值。参数值也是用括起来的,代表选填
7. 函数后的参数变量,主要功能是把函数体外的变量值,传入函数体内来使用,函数体的变量和函数体外的
变量通常是两个不同的变量。
8. 函数中的具体功能(功能体)用大括号括起来,代表这是一个函数的功能区间
9. 函数可以有返回值也可以没有返回值,用[](中括号)括起来的,代表选填。
10. return后接空格,空格后接返回值,若有return,return后的代码均不执行。(return可用可不用)
11. 函数的执行没有顺序关系,可以在定义处之前的位置调用
12. 函数不能被定义两次,即函数不能被重载

1. 函数是条狗,哪里调用哪里哪,它就跟着你走
2. 函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位。
3. 函数名与变量命名规则一样,但是不同的是:函数名不区分大小写
4. 函数体的参数若是定义了,未传参数,代码会报错
5. 函数的参数如果有默认值,参数可以不填,代码也不会报错
6. 函数的参数可以写多个
7. 函数如果有默认值和无默认值的参数,通常把无默认值的参数写在最前面
8. 函数体的变量与函数体外的变量没有关系
9. 函数体中若有return,return 后的代码不执行
10. 函数执行完后,return 可把函数体内的值,带带函数体外
11. 函数的执行没有顺序关系,可以在定义处之前的位置调用
12. 函数不能重载


1.2 回调函数

一个函数作为另外一个函数的参数

回调函数,可以配合匿名函数和变量函数实现更加优美、复杂的一种函数结构。
回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数配合、协助进行处理。
<?php
function woziji($one,$two,$func){
       //我规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false
       if(!is_callable($func)){
               return false;
       }

       //我把$one$two相加,再把$one$two传入$func这个函数中处理一次
       //$func是一个变量函数,参见变量函数这一章
       echo $one + $two + $func($one,$two);

}

//我们定义几个函数试试
function plusx2( $foo , $bar){
       $result = ($foo+$bar)*2;
       return $result;
}

function jian( $x , $y ){
   $result = $x - $y;
   return $result;
}
//调用一下函数,woziji,向里面传入参数试试
echo woziji(20,10,'plusx2');

//将plusx2改成jian试试结果
echo woziji(20,10,'jian');
?>

处理过程是这样的:
1.将20赋值给形参$one,10赋值给了$two,而plusx2或者jian这两个变量函数,赋值给了$func
2.在woziji这个函数中判断plusx2或者jian是否为函数,不是函数就return false 停止执行了
3.显示plusx2或者jian是函数。因此$one = 20, $two =10相加了,相加后,$one和$two又带入到了了$func($one,$two)中。
4.带入至里面后而$func,是可变的,可以为plusx2或者jian。如果为plusx2的话,$one = 20,$two = 10 的这个两个结果又给 了plusx2函数里面的$foo和$bar
5.$foo + $bar 乘以2后将结果返回至woziji这个函数功能体的运算处:$one + $two + $func($one,$two);
6.这样得到了运算结果
现在我们明白了回调函数:在一个调数里面,再传入一个函数名,将函数名加上()括号。识为变量函数,配合执行。


1.3 变量函数

function demo(){}
$fu = ‘demo’;
$fu();

在之前的变量部份,我们学习了可变变量。可变函数仅仅是可变变量的一个变种、变形表达。
可变函数,我们也会称呼为变量函数。简单回顾一下之前的知识点:
<?php 
$hello = 'world';
$world = '你好';
//输出的结果为:你好
echo $$hello; 
?>

因为$hello先被解释成了world,再world前加上$符就输出了:你好。


变量函数的用法是这样的:

<?php
function demo(){
    echo '天王盖地虎';
}
function test(){
    echo '小鸡炖蘑菇';
}
$fu = 'demo';
//把$fu变为了demo,把demo后加上了一个括号,就执行函数了
$fu();
//把$fu的值改为test字符串再试试?
?>


1.4 匿名函数

匿名函数,也就是没有函数名的函数。

匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数。
匿名函数的写法比较灵活。

1.变量函数式的匿名函数
<?php
$greet = function($name)
{
 echo $name.',你好';
};
$greet('明天');
$greet('PHP中文网');
?>

上例中的函数体没有函数名,通过$greent加上括号来调用的,这就是匿名函数。

2.回调式的匿名函数
实际使用场景中,我们要通过一个函数实现更多的功能。但是,我又不想专门定义一个函数。我们回顾一下,我们回调函数的例子:

<?php
function woziji($one,$two,$func){
       //我规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false
       if(!is_callable($func)){
               return false;
       }
       //我把$one$two相加,再把$one$two传入$func这个函数中处理一次
       //$func是一个变量函数,参见变量函数这一章
       echo $one + $two + $func($one,$two);
}
woziji(20,30,function( $foo , $bar){
               $result = ($foo+$bar)*2;
               return $result;
           }
);
?>


仔细推理一下过程哟。只不过在之前的章节当中,plusx2换成了我们的匿名函数:

<?php

function( $foo , $bar){

       $result = ($foo+$bar)*2;

       return $result;

}
?>

因此,函名函数在调用的时候没有函数名。我们可以采用以上的一些方法来使用匿名函数。


1.5 内部函数

内部函数,是指在函数内部又声明了一个函数。

注意事项:
1. 内部函数名,不能是已存在的函数名
2. 假设在函数a里面定义了一个内部函数,不能定用两次函数a。

我们下面来看代码,你将很快的学习会:

<?php
function foo()
{
   echo '我是函数foo哟,调一下我才会执行定义函数bar的过程<br />';
 function bar()
 {
      echo '在foo函数内部有个函数叫bar函数<br />';
 }
}

//现在还不能调用bar()函数,因为它还不存在
//bar(); //如果现在调用会报错
foo();

//现在可以调用bar()函数了,因为foo()函数的执行使得bar()函数变为已定义的函数
bar();
//再调一次foo()看看是不是会报错?  会报错
foo();
?>

仔细观察和实验后你会得出如下的结论:
1.foo()调用两次会报错
2.如果不调foo()函数无法执行bar函数,因为bar是在foo的内部


1.6 参数的引用

在变量这个函数中,我们学习了变量的引用,我们来回顾一下知识:

<?php

$a = 10;

$b = &$a;

$a = 100;

echo $a.'---------'.$b;
?>

上述知识点的在变量章节中,变量引用有讲述,是指变量$a和$b指向到了同一个存储位置,来存值。

而函数的参数引用,也是这个意思,将形参和实参指向到同一个位置。如果形参在函数体内发生变化,那么实参的值也发生变化。我们来通过实验来看看:
<?php

$foo = 100;

//注意:在$n前面加上了&function demo(&$n){

       $n = 10;

       return $n + $n;

}

echo  demo($foo).'<br />';

//你会发生$foo的值变为了10
echo $foo;
?>

通过上例,我们发现实参为$foo,在调用demo的时候,让$foo和$n指向到了同一个存储区域,当$n的值发生变化的时候。那么$foo的值也发生变化。


1.7 递归函数

递归函数,递归只是一个名字,而递归函数的规定:函数体内调用函数自己
递归在实际工作中主要是用在:文件和文件夹操作的时候有使用到。

几个思维上的盲区:
1.代码是从上到下执行的,所有代码没有exit等停止符,函数必须执行完。
2.如果函数从函数A跳至函数B后,必须把函数B执行完成再执行函数A余下的代码。
3.递归函数必须要能执行完有结束条件,不然函数就会限入死循环。函数会永远的自我执行下去。

我们来写一代码码来理解一下:

<?php
$num = 10;
//调用一次函数A();
A($num);

function A( $arg ){
   echo $arg;
   //在函数A里面去,跑去执行函数B去了
   B($arg);
   echo '我们需要不断的努力,努力到上天都为我们感动';
   echo $arg.'<br />';
}
function B( $number ){
       echo $number;
       echo '俺是狗蛋,执行完了<br />';
}
?>

结论:
1.执行函数A到一半的时候,跑去执行了函数B
2.执行完函数B,先显示出来的是:“俺是狗蛋,执行完了”,接着显示的才是:“我们需要不断的努力,努力到上天都为我们感动”
3.也就是证明了我们所说思维盲区里面的内容,代码从上到下执行,代码必须执行完。


我们来写一个简单的递归代码,让函数自己调用自己。

<?php
$n = 2;
function dg( $n ){
   echo $n.'<br />';
   $n = $n - 1;
   if($n > 0){
       //在函数体内调用了dg自己哟
       dg($n);
   }else{
       echo '--------------';
   }
   echo '俺是狗蛋,俺还没执行' . $n . '<br />';
}
?>

我们来仔细推理一次:
1.第一次调用dg(),将数字$n = 2传到dg中,先显示出来了2
2.然后将$n - 1 $n的值为了1
3.接着判断$n 是否大于0,肯定是大于0的,所以调用递归自己,再把自己执行一次。
4.而第二次在执行自己dg()的时候,而最下面的 echo ‘俺是狗蛋,俺还没执行’ . $n . ‘
‘; 还没有执行到。等待执行完成后再来执行
5.$n此时等于1 ,所以显示出来1。
6.$n把自己减了一次,$n的结果为0
7.$n大于0肯定不成立的,所以显示了一条:”————–”
8.而这个时候该执行:echo ‘俺是狗蛋,俺还没执行’ . $n . ‘
‘;
9.第二次执行dg()执行完成。第一次dg()的代码还没执行完,将第4点中的余下代码执行完。


1.8 静态变量

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。
实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量
以下讲述局部静态变量和全局静态变量:
<?php
//--------------如何理解static静态变量-----------

/** 普通局部变量 */
function local() {
 $loc = 0; //这样,如果直接不给初值0是错误的。
 ++$loc;
 echo $loc . '<br>';
}
local(); //1
local(); //1
local(); //1
echo '===================================<br/>';

/** static静态局部变量 */
function static_local() {
 static $local = 0 ; //此处可以不赋0值
 $local++;
 echo $local . '<br>';
}
static_local(); //1
static_local(); //2
static_local(); //3
//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。
echo '=======================================<br>';

/** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */
function static_global() {
 global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,
 //但是不能想当然的写上"static"加以修饰,那样是错误的.
 $glo++;
 echo $glo . '<br>';
}
static_global(); //1
static_global(); //2
static_global(); //3
?>




二. 系统函数

2.1 使用介绍

[PHP手册下载]
1. 如果代码能赚钱,帮你赚钱最多的是基本语法
2. 如果你还在当程序员,你看手册的时间可能比你看老婆的时间还长

使用函数的重点是三块:
1.了解函数的功能,特别是常用函数的功能
2.了解函数的参数
3.了解函数的返回值

我们针对上面的三块,讲解6个函数,这6个函数,概况了函数的基本用法的全部注意事项:

1. 直接返回布尔型,如bool copy ()
2. 带有MIXED参数的函数如何调用。Mixed表示任何类型的数据。如Array_unshift()
3. 参数中带有&符的参数,一定要传一个变量做为参数。函数里面改变了他的值。
4. 带有[]的参数,表示可选项。
5. 带有…的参数,表示可以传任意多个参数。
6. 带有callback的参数,表示回调函数。需要传一个函数进来。Array_map()
7. 函数支持的版本要了解。

1. 直接返回布尔型
bool copy ( string $source , string $dest [, resource $context ] )

这个函数的功能为: 拷备一个文件
返回值为为: bool型值,就是成功返回true,失败返回false
参数为: 两个字符串的值,一个是copy的源文件,一个为目标文件。第三个参数可选的,不常用,我们不管它。

<?php

if(copy('abc.txt','bcd.txt')){
   echo '复制成功';
}else{
   echo '复制失败';
}
?>

2. Mixed表示任何类型的数据。如Array_unshift()
int array_unshift ( array &$array , mixed $value1 [, mixed $… ] )

功能: 操作一个数组,向数组中之前插入其他类型的参数。
返回值: int 类型,可能就是插入成功最后的个数
参数:
第一个参数为&符
,也就是在操作的过程中,改变了第一个参数的值。引用传参。也就是操作这个数组,向这个数组中传入参数。会直接改变这个数组的值。
第二个参数为mixed
,因为数组可以存入多个不同的类型.mixed是指混合的意思。因此,mixed是指可传入任意类型
第三个数数加了中括号[ ]
,我们所有遇到中括号的。都是指后面的参数可传,也可以不传。
第四,最后还看到了三个…(省略号)。代表可以传入任意多个参数。

<?php
$queue = array("凤姐", "芙蓉");
array_unshift($queue, "杨幂", "姚晨");
print_r($queue);
?>

运行结果:
Array ( [0] => 杨幂 [1] => 姚晨 [2] => 凤姐 [3] => 芙蓉 )

3. 遇到callback的传函数或者匿名函数进去协助处理,让功能更强大。

bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )

功能:
传入一个回调函数,将数组的原来的组操作,并且发生变化。
返回值:

bool 值 也就是意味着,提示成功或者失败
参数:

第一个参数是要操作的数组。
第二个参数是callback 代表着可以传入函数或者匿名函数。

<?php
$shuaige = array("a" => "wuyanzhu", "b" => "huangxiaoming", "c" => "ninzetao");

function test_print($item2, $key)
{
   echo $key ." ---". strtoupper($item2) . "<br />\n";
}

echo '<pre>';
var_dump($shuaige);
echo '</pre>';


array_walk($shuaige, 'test_print');

echo '用自定义函数test_print执行后的效果:';

echo '<pre>';
var_dump($shuaige);
echo '</pre>';
?>

运行结果:
array(3) {
  ["a"]=>
  string(8) "wuyanzhu"
  ["b"]=>
  string(13) "huangxiaoming"
  ["c"]=>
  string(8) "ninzetao"
}
a ---WUYANZHU
b ---HUANGXIAOMING
c ---NINZETAO
用自定义函数test_print执行后的效果:
array(3) {
  ["a"]=>
  string(8) "wuyanzhu"
  ["b"]=>
  string(13) "huangxiaoming"
  ["c"]=>
  string(8) "ninzetao"
}

通过上例,我们发现数组中的每个参数和值都被修改了。上例大家只需要理解看见传callback的,需要传入函数协助处理就可以。不用理解。我们在下一章的数组部份,学习完数组,大家可以再看看。
函数支持的版本号很重要。


2.2 文件包含函数

在实际开发中,常常需要把程序中的公用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可。这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利。在PHP中, 有
include
include_once
require
require_once
四种方法包含一个文件。
函数 包含失败 特点
Inlcude 返回一条警告 文件继续向下执行。通常用于动态包含
Require 一个致命的错 代码就不会继续向下执行。通常包含极为重要的文件,整个代码甭想执行
Include_once 返回一条警告 除了原有include的功能以外,它还会做once检测,如果文件曾经已经被被包含过,不再包含
Require_once 一个致命的错 除了原的功能一外,会做一次once

注意:
1,少用_once带once,因为它会消耗更多的资源去做检测的工作。
2,特高级
Include文件只需要编译一次,因为每次包含include都会再执行一次对应的代码,如何减少include再次执行
时,需要重新解析的过程。

1. include包含函数的功能。

创建一个functions.php文件,里面写上两个函数:(1)↓↓
<?php
//functions.php文件

function demo(){
   echo 'aaaa';
}

function test(){
   echo 'cccdddd';
}
?>


在functions.php的同级目录下,我再创建一个user.php文件把functions.php文件包含进来。这样我的函数就可以专门放在functions.php里面,哪儿需要用到这些函数的时候,我就从哪儿包含进来:

<?php

//user.php

include 'functions.php';

//可以直接调用
demo();

test();
?>


接下来我们对比include和require:(2)↓↓
代码中,我们先用include来包含不存在的test.php文件,

<?php

//user.php

include 'functions.php';
include 'test.php';

//可以直接调用
demo();

test();
?>

再用require包含 不存在的test.php文件:

<?php

//user.php

include 'functions.php';
require 'test.php';

//可以直接调用
demo();

test();
?>

通过上例的对比我们发现:
(1) 如果test.php文件不存在include 会发出警告继续执行demo()和test()函数。
(2) 而requre则直接报错,demo()和test()函数无法继续执行。


我们通过表格知道了:inlcudeinclude_once的区别在于,检测是否重复包含。如果重复包含了include_once不会再包含 对应的文件了,而include 则不管这些。有没引入过文件,都再引入一次。include使用两次会报错,而include_once不会报错!

同样刚刚的user.php我们再实验一下,我们将functions.php包含两次,分别使用includeinclude_once(3)↓↓

<?php

//user.php

//这儿被包含了两次同样的函数定义文件哟
include 'functions.php';
include 'functions.php';

//可以直接调用
demo();

test();
?>

运行后系统会报错!!!

改为include_once再试一次:

<?php
//user.php

//这儿被包含了两次同样的函数定义文件哟
include_once 'functions.php';
include_once 'functions.php';

//可以直接调用
demo();

test();
?>

运行后系统不会报错!!!

结论:
我们在函数定义章节讲过,函数不能定义两次,否则会报错。使用include时,因为我们将 functions.php包含了两次所以执行了两次,因此报这个错误
include_once不报错的原因是因为:他检测了functions.php曾经包含过,不再进行包含引入了。

requirerequire_once的功能,大家用你最最聪明的小脑袋是不是就能推理出来了呢?require_once有两个特点:
1. 包含的文件必须存在,否则停止执行
2. 会做重复包含检查哟


2.3 数学常用函数

在PHP程序中常常需要进行数据处理运算,这就需要使用数学函数。数学函数是最简单、最常用的系统函数。本章以数学函数为例讲解系统函数的调用方法。

只需要记最常用的一些即可,最常用的列表:

函数名 描述 实例 输入 输出
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() 求最小值 min 多个数字或数组 返回其中的最小值
mt_rand() 更好的随机数 echo mt_rand(0,9);//n 最小/最大,随机数 随机返回范围内的值
rand() 随机数 echo rand() 最小/最大,随机数 随机返回范围内的值
pi() 获取圆周率值 echo pi();
// 3.1415926535898
获取圆周率


2.4 获取时期时间信息函数

在正式学习日期函数前大家得了解几个概念:
1. 时区
2. 世界时
3 .unix时间戳

时区
这个概念,之前大家听说过很多。我们来啰嗦两句,我们现实生活中使用的实区,在电脑里面也是一样有规定的。
1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。
在中国采用首都北京所在地东八区的时间为全国统一使用时间。

世界时
不光是天文学家使用格林尼治时间(英文简写:GMT),就是在新闻报刊上也经常出现这个名词。我们知道各地都有各地的地方时间。如果对国际上某一重大事情,用地方时间来记录,就会感到复杂不便.而且将来日子一长容易搞错。因此,天文学家就提出一个大家都能接受且又方便的记录方法,那就是以格林尼治(英国某地区)的地方时间为标准。

unix时间戳
电脑本身不认识时间,我们在电脑里面设置一个时间方便运算。于是我们规定了一种计算方式,unix时间戳。
从Unix纪元(1970 年 1月1日零时)开始到一个时间经过的秒数。

1. 设置时区
如果,我们是跨国的多语方程序,我们通常是通过在配置文件里面来写好了个时区,每次程序运行的时候。都会读取这个时区的设置,来显示时间。

设置时区的函数为:
1). date_default_timezone_get()
2). date_default_timezone_set()

(1)↓↓
第一个函数就不重点讲解了,比较简单。
用法如下:
string date_default_timezone_get ( void )
功能如下:取得一个脚本中所有日期时间函数所使用的默认时区
示例:
<?php
echo date_default_timezone_get ();
?>

输出:UTC

(2)↓↓
第二个函数是重点:
用法如下:
bool date_default_timezone_set ( string $timezone_identifier )
功能如下:用于所有日期时间函数的默认时区 [注:时区列表请详见官方手册]
<?php
//定义一下时区常量,以后你可以放到配置文件里
define('TIME_ZONE','Asia/shanghai');

//执行函数
date_default_timezone_set(TIME_ZONE);

echo date('Y-m-d H:i:s');
?>

输出:2019-02-17 13:03:42

2. time()获取当前的unix时间戳
以下代码输出当前时间的Unix时间戳。
<?php
   $time=time();
   print_r( $time);
?>
程序运行结果:
1421597858

3. “亚麻跌”是PHP学习时间处理的关键
Y  英文是 year, 为年份 代表年 ——亚
m  英文代表month,为月份 代表月 ——麻
d  英文代表day, 为日期 代表日 ——跌
H:i:s  代表的是:时分秒
h  的英文为:hour 代表小时
i  的英文为:minute 代表分钟
s  的英文为:second 代表秒

所以我们需要输出前前的年份,月份,日期的话。例如:1997年7月1日,我们就可以用到上面的三个参数。

<?php

echo date('Y年m月d日');
?>

2019年02月17日


写全了就是:

<?php

//就可以显示出来当前的时间了哟。
echo date('Y-m-d H:i:s');
?>

date函数用于将一个时间进行格式化输出,以方便时间的显示或存储。其语法格式如下:
string date ( string $forrnat [, int $timestamp] )
在参数列表中:
$timestamp是一个时间戳,函数将这个时间戳按$format规定的格式输出。
如果$timestamp没有输入值,则默认为当前的时间。
$format是一个时间输出格式的字符串,需要使用规定的字符构造输出格式。

date函数的格式参数表:
字符 说明 返回值
d 月份中的第几天,有前导零的2位数字 01到31
D 英文星期几,3个字母 Mon到Sun
j 月份中的第几天,没有前导零 1到31
l(字母) 英文星期几 Sunday到 Saturday
N 1格式数字表示的星期 1(表示星期一)到7(表示星期天)
S 每月天数后面的英文后缀,2个字符 st,nd,rd或者th。可以和jg一起用
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
z 一年中的第几天 0到366
W 年份中的第几周,每周从星期一开始 42(当年的第42周)
F 月份,完整的文本格式 January 到 December
m 数字表示月份,有前导零 01 到 12
M 3个字母缩写表示的月份 Jan 到Dec
n 数字表示月份,没有前导零 1 到 12
t 给定月份所应有的天数 28 到 31
L 是否为闰年 如果是闰年为1,否则为o
o 格式年份数字 例如2007
Y 4 位数字完整表示年份 例如1999或2008
y 2 位数字表示的年份 例如99或08
a 小写的上午和下午值 am或pm
A 大写的上午和下午值 AM或PM
g 小时,12小时格式,没有前导零 1到12
G 小时,24小时格式,没有前导零 0 到 23
i 有前导零的分钟数 00 到 59
s 秒数,有前导零 00到59
e 时区标识
U 从Unix纪元开始至今的秒数 长整型数字

4. getdate获取当前系统时间
getdate用来获取当前系统的时间,或者获得一个时间戳的具体含义。时间戳是一个长整数,表示getdate的语法格式如下所示。
array getdate ([ int $timestamp = time() ] )
函数的返回值是一个根据timestamp得到的包含有时间信息的数组。如果没有参数,则会返回当前的时间。getdate返回的数组,键名包括时间和日期的完整信息。
键名 说明 返回值
secnods 数字0到 59
minutes 分钟 数字0到59
hours 小时 数字 0到 23
mday 月份中第几天 数字 1到 31
wday 星期中第几天 数字 0(表示星期天)到6(表示星期六)
mon 月份 数字 1 到 12
year 4 位数字表示的完整年份
yday 一年中第几天 数字 0到365
weekday 星期几的英文 Sunday到 Saturday
month 月份的英文 January 到 December
0 自从Unix纪元开始的秒数 长整型数字


以下代码可以返回getdate 数组的详细信息。

<?php
   $mytime=getdate(); 
   print_r( $mytime);
?>


print_r可以输出一个数组中所有的键名与值。运行这段代码,结果如下所示。程序输出当前计算机的时间与日期详细信息:

Array
(
    [seconds] => 1            //秒
    [minutes] => 10            //分钟
    [hours] => 17            //小时
    [mday] => 18            //日
    [wday] => 0            //星期中的第几天
    [mon] => 1            //月
    [year] => 2015            //年
    [yday] => 17            //年中的第几天
    [weekday] => Sunday        //星期
    [month] => January        //月份
    [0] => 1421597401        //时间戳
)

↓↓理解了getdate函数和返回的数组以后,就很容易取得当前的时间信息了。下面的代码就是用getdate函数取得时间信息,调用返回时间数组的值输出时间信息。
<?php 
$mytime = getdate();
echo "年 :".$mytime['year']."\n";
echo "月 :".$mytime['mon']."\n";
echo "日 :".$mytime['mday']."\n";
echo "时 :".$mytime['hours']."\n";
echo "分 :".$mytime['minutes']."\n";
echo "秒 :".$mytime['seconds']."\n";
echo "一个小时中的第几钟 :".$mytime['minutes']."\n";
echo "这是一分钟的第几秒 :".$mytime['seconds']."\n";
echo "星期名称 :".$mytime['weekday']."\n";
echo "月份名称 :".$mytime['month']."\n";
echo "时间戳   :".$mytime[0]."\n";
?>

运行结果:
年 :2019 
月 :2 
日 :17 
时 :5 
分 :39 
秒 :34 
一个小时中的第几钟 :39 
这是一分钟的第几秒 :34 
星期名称 :Sunday 
月份名称 :February 
时间戳 :1550381974

5. 日期验证函数
checkdate可以判断一个输出的日期是否有效。
在实际的工作中,我们需要经常用于检测常用于用户提交表单的数据验证。
例如:验证用户输入的时间是否正确
函数的语法格式如下:
bool checkdate ( int $month , int $day , int $year )


<?php
var_dump(checkdate(12, 31, 2018));
var_dump(checkdate(2, 29, 2011));
?>
输出结果:

bool(true)
bool(false)

6.获取本地化时间戳函数
mktime()函数、strtotime()函数。
[注:使用方法]


2.5 检测程序执行时间

我们有的时经常需要做程序的执行时间执行效率判断。
实现的思路如下:
<?php
//记录开始时间



//记录结整时


// 开始时间  减去(-)  结束时间  得到程序的运行时间

?>


可是不要忘了,程序的运行速度太快了。快到只有0.00000几秒的一刹那。那这个时候大家要记录一个特函的函数了:
mixed microtime ([ bool $get_as_float ] )
microtime()这个函数,能够返回当前 Unix 时间戳和微秒数。
参数:
如果你传入true的话,将会返回一个浮点类型的时间,这样方便参与运算。

模拟一个检测函数执行时间的例子,测试某个函数效率的快慢:

<?php
//开始时间
$time_start = microtime(true);

//循环一万次
for($i = 0 ; $i < 10000 ; $i++){
   //你可以用上,mktime() 生成一个昨天的时间
   //再用strtotime() 生成一个昨天的时间
   //对比两个函数认的效率高
}
//结整时间
$time_end = microtime(true);
//相减得到运行时间
$time = $time_end - $time_start;
echo "这个脚本执行的时间为 $time seconds\n";
?>

运行结果:
这个脚本执行的时间为 0.00016498565673828 seconds

最后输出的结果就是我们实际的函数的执行时间。你可以多对比几次,看看最终的结果。
谁的时间短,在实际的工作中,你就可以经常使用哪个函数。


2.6 字符串常用函数

数组字符串数据库是我们函数里面最、最、最常用的三类函数。

当然PHP的字符串函数也有很多。我们最常使用的两个系列的字符串:
1.单字节字符串处理函数
2.多字节字符串处理函数
3.字符串编码转换函数

我们来说说为什么要学这么多函数:
1.我们学的是中文,是双字节或者三字节的。老外的函数只能处理英文和数字这些单字节的字符串处理不鸟中文。达不到我们的功能需求
2.有的时候需要做不同字符编码间的转换,例如:把GBK的转为UTF-8
3.英文这些字符在电脑里又是必须要处理的

中文主要用的是GBK和utf-8两种编码格式。
GBK和utf-8是两个不同的编码委员会对于汉字进行的编码的标准。
他们规定GBK是双字节,也就是一个汉字占用2Bytes。
utf-8是三字节,一个汉字占用三个字节长度的存储空间。

PHP常用函数:
函数名 描述 实例
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)
iconv:
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成为一个数组

  Reprint please specify: Treecatee PHP-函数

 Previous
PHP-文件系统 PHP-文件系统
学习文件处理本质上面就是学习文件处理的函数。 ヾ(๑╹◡╹)ノ”    PHP 文件系统    一. 读取文件  1.1 readfile读取文件读取一个文件内容的函数:int readf
2019-02-20
Next 
PHP-正则表达式 PHP-正则表达式
世界上最难懂的是道士的鬼符、医生的处方和程序员的正则表达示。(ง •_•)ง    PHP 正则表达式    正则表达示我们其实之前经常看到,它主要用在以下一些地方:1.匹配邮箱、手机号码、验证码2
2019-02-14
  TOC