• PHP-基础知识


    基础知识

    PHP是什么?

    PHP(PHP: Hypertext Preprocessor,超文本预处理器的缩写),是一种被广泛应用的开放源代码的、基于服务器端的用于产生动态网页的、可嵌入HTML中的脚本程序语言,尤其适合 WEB 开发。

    当客户端向服务器的程序提出请求时,web服务器根据请求响应对应的页面,当页面中含有php脚本时,服务器会交给PHP解释器进行解释执行,将生成的html代码再回传给客户端,客户端的浏览器解释html代码,最终形成网页格式的页面。

    执行方式

    PHP 代码被包含在特殊的起始符和结束符中,使得网页的脚本可以进出“PHP 模式”。其它用 C 或 Perl 语言写的脚本,需要用大量的命令来编写程序以输出 HTML ,而用PHP 编写一个 HTML 脚本,只需嵌入了一些代码来完成操作(例如,在本例中输出了一些文本)。 和客户端的 JavaScript 不同的是,PHP 代码是运行在服务端的。如果在服务器上建立了如上例类似的代码,则在运行该脚本后,客户端就能接收到其结果,但他们无法得知其背后的代码是如何运作的。甚至可以将 web 服务器设置成让 PHP 来处理所有的 HTML 文件,这么一来,用户就无法得知服务端到底做了什么。

    PHP运行环境安装

    大家在初始学习PHP时使用集成化开发环境是最好的选择,下面是常用的集成开发环境

    集成开发软件 可使用的操作系统 说明
    WAMP Win 推荐
    XAMPP Win/Mac
    Mamp Mac 推荐
    Lamp Linux(CentOS/Fedora/Debian/Ubuntu)

    PHP的特点

    • 是开放源代码的,服务器端的脚本语言。
    • 独立于操作系统,可以运行在几乎所有系统中。
    • 支持大部分的服务器,如Apache,IIS。
    • 支持大量的数据库,主要是AccessMySQLSQL Server这三种。
    • 可以创建图象。
    • … …
    • 还有一些其他特色功能在后面的高级技术详细介绍。
    • 我们知道的网站如迅雷、新浪微博等大型网站都在使用PHP程序。

    C/S与B/S结构

    C/S结构

    C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构

    B/S**结构

    B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。

    集成开发环境

    WAMP

    Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

    MAMP

    苹果系统下MAMP PRO是专业级版本的经典本地服务器环境的os x软件。MAMP这几个首字母代表苹果的OSX系统上的Macintosh、Apache、MySQL和PHP,顾名思义,你应该知道MAMP的强大功能 啦!MAMP 内含 Apache 伺服器、PHP 安装套件以及MySQL安装套件。

    PHP的标记风格

    ``

    这是PHP推荐使用的标记风格。服务器管理员不能禁用这种风格的标记。

    分号

    PHP用分号来分隔简单的语句。复合语句用大括号来标记代码块,如条件测试或循环,在大括号后面不要用分号。和其他语言不一样的是,在PHP中右括号(?>)前的分号不是必选的。

    空白和换行符

    一般来说,空白符在PHP中无关紧要。可以将一个语句展开成任意行,或者将语句紧缩在一行。 可以利用这个灵活的格式来使代码更具有可读性(通过排列分配、缩进等)。一些懒惰的程序员利用这种自由的格式创建根本无法阅读的代码,这是不提倡的。

    程序的注释

    PHP支持C、C++和Shell脚本风格的注释,如下:

    // 单行注释
    /* ...*/  多行注释 		(注意:不能嵌套)
    # 脚本注释
    

    查看数据

    echo

    输出一个或多个变量,他不是函数,不需要使用括号,如果输出多个请用逗号分隔

    echo 1,2,3,4;
    

    var_dump

    打印变量的相关信息

    var_dump(1234);
    

    区别:echo 是直接输出,var_dump输出和带有变量类型

    变量知识

    定义变量

    PHP是弱类型语言,不像其他语言需要对变量进行类型声明。PHP中以 $ 作为前缀来定义变量,以a~z(大小写)或 _ 下划线定义变量名。

    下面是合法的变量名

    $hd =  'baidu.com';
    $_name = '姜姜';
    

    下面是非法的变量声明

    $999 = 'yahoo.com'
    $&* = 'sina.com.cn'
    

    弱类型

    PHP是一种非常弱的类型语言。在大多数编程语言中,变量只能保持一种类型的数据,而且这个类型必须在使用变量前声明,例如C语言中。

    而在PHP中,变量的类型通常不是由程序员设定的,确切地说,是根据该变量使用的上下文在运行时(即变量的值)决定的。

    简单来说,var = 1;就是数字,var2 = '1'就是字符串,变量类型是由值决定的。

    传值与引用

    传值赋值

    直接使用 = 将变量的值赋值给另一个变量。

    $a = 1;
    $b = $a;
    $b = 2;
    echo $a;//结果是1
    

    引用赋值

    将一个变量的内存地址赋值给另一个变量的行为即传址赋值。需要在 = 等号前加上 & 引用符号,这样两个变量指向内存中的一个地址,任何一个变量的改变都影响到另一个变量,有点类似于快捷方式的概念。

    $a = 1;
    $b = &$a;
    $b = 2;
    echo $a;//结果是2
    

    可变变量

    可以变量即使用一个变量的值,作为另一个变量名。

    $a = 'hello';	//普通变量
    $$a = 'world';	//可变变量 相当于:$hello = ‘world’;
    echo "$a ${$a}";//输出:hello world
    echo "$a $hello";//输出:hello world
    

    变量作用域

    变量作用域指变量在代码中可以访问的位置。

    超全局变量

    可以代码的任何位置都可以访问的变量

    变量 说明
    $_GET 地址栏GET提交
    $_POST 表单POST提交
    $_FILES 文件上传变量
    $_SESSION 会话变量
    $_COOKIE cookie值变量
    $_GLOBALS 全局变量
    $_REQUEST 包含$_GET、$_POST、$_COOKIE
    $_SERVER 服务器环境变量

    全局变量

    全局声明(函数外声明)的变量会保存在 $_GLOBALS 中,函数内默认不能访问到全局变量,在函数中访问需要使用 global 关键字。

    $hd='后盾人';
    function p() {
    	//利⽤ global 引入全局变量
    	global $hd; 
    	echo $hd;
    }
    p(); 
    

    也可以使用全局数组$GLOBALS调⽤用全局变量量。 如: $GLOBALS['hd'];

    检测变量

    通过isset 函数可以检测变量是否定义。

    var_dump(isset($name));
    # 结果是false
    

    变量销毁

    php在全部代码执行结束后会删除所有变量,也使用 unset 函数可以在程序运行中删除变量。

    $name='houdunren.com';
    unset($name);
    

    全局变量不能在函数中删除

    $name = 'houdunren.com';
    function run()
    {
        global $name;
        unset($name);
    }
    run();
    echo $name;
    # 依然可以输出 houdurnen.com
    

    静态变量

    PHP支持声明函数变量为静态的(static)。一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调⽤时被初始化。 要声明函数变量为静态的⽤关键字static。通常静态变量的第一次使⽤用时赋予⼀个初始值。

    function calculate()
    {
        static $a=1;
        return ++$a;
    }
    calculate();
    echo calculate();
    

    数据类型

    使用不同数据类型储存不同数据,就像我们家里面放衣服和放洗手液会使用用不同的容器一样。下面是常用PHP数据类型表:

    类型 说明
    integer 整型
    float 浮点型
    string 字符串
    boolean 布尔型
    array 数组
    object 对象

    整型

    整型可以是十进制、八进制、十六进制。

    01988 #十进制
    0xfff #十六进制
    

    下面是 777 八进制数转成 10进制数,即逢8进1原则,PHP中使用 octdec() 函数可以将8进制转为10进制。 $$ 782+7*81+78^0 = 511 $$

    下面是十六进帛 FAF 转为10进制数,PHP中使用hexde()函数将16进制转为10进制

    $$ 15162+10*161+1516^0 $$

    浮点数

    浮点数表示实数,可理解为有限或无限小数。

    0.12
    -10.98
    

    布尔型

    当转换为 boolean 时,以下值被认为是FALSE:这个地方提示学生不用记,按照自己的感觉来就可以判定了,读完一遍之后把ppt关掉,提问true还是false,学生都会知道的

    1. 布尔值 FALSE
    2. 整型值 0(零)
    3. 浮点型值 0.0(零)
    4. 空白字符串
    5. 字符串 "0"
    6. 没有成员变量的数组
    7. 没有单元的对象(仅适用于 PHP 4)
    8. 特殊类型 NULL(包括尚未设定的变量)

    所有其它值都被认为是 TRUE

    字符串

    定义

    引号

    字符串可以用双引号"" 或 '' 号包含,区别是双引号中可以解析变量。

    $url = 'houdunren.com';
    $string = "后盾人网址是 {$url}";
    

    在所有输出前使用下面的代码可以正确显示中文:

    header('Content-type:text/html;charset=utf-8');
    

    定义符

    定界符文本表现的就和双引号字符串一样,在定界符文本中不需要转义引号,适合输入大量文本。

    结束符必须从第一列开始,并且后面除了分号以外不能包含任何其他字符,空格也不可以。

    $string =<<<str
    这是使用定界符输入的内容
    str;
    echo $string;
    

    连接符

    多个字符串使用 . 符号连接

    $name = '后盾人';
    $url  = 'houdunren.com'
    echo $name.$url;
    

    转义

    转义是将有多种含义的字符进行转换,比如 $即是变量前缀也是美元符号,就需要转义在不同场景进行改变。

    echo  "变量定义 $name = 'houdunren.com',学会了吗?";
    

    常用函数

    strlen — 取得字符串长度传度的函数

    echo strlen('houdunren.com');
    

    mb_strlen — 根据字符编码获取长度

    echo mb_strlen('后盾人','utf8');
    

    trim — 截去字符串首尾的内容

    $string = ' houdunren.com  ';
    echo strlen(trim($string,' moc'));
    # 从前后删除 moc和空格字符
    

    rtrim从右侧删除、ltrim从左侧删除

    $string = ' houdunren.com  ';
    echo strlen(rtrim($string,' moc'));
    

    strtolower — 字母转为小写

    $str = "Mary Had A Little Lamb and She LOVED It So";
    $str = strtolower($str);
    echo $str; // Prints mary had a little lamb and she loved it so
    

    strtoupper — 字母转大写

    $str = "Mary Had A Little Lamb and She LOVED It So";
    $str = strtoupper($str);
    echo $str; // Prints MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
    

    ucfirst — 将字符串的首字母转换为大写

    $foo = 'hello world!';
    $foo = ucfirst($foo); // Hello world!
    

    ucwords — 将字符串中每个单词的首字母转换为大写

    $foo = 'hello world!';
    $foo = ucwords($foo);             // Hello World!
    
    $foo = 'hello|world!';
    $baz = ucwords($foo, "|");        // Hello|World!
    

    md5 — 计算字符串的 MD5 散列值,以 32 字符十六进制数字形式返回散列值

    md5('houdunren.com') //962ff8546a001f8f6d0adecf08905d14
    

    explode — 使用一个字符串分割另一个字符串

    $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
    $pieces = explode(" ", $pizza);
    echo $pieces[0]; // piece1
    echo $pieces[1]; // piece2
    

    implode — 将一个一维数组的值转化为字符串

    $array = array('lastname', 'email', 'phone');
    $comma_separated = implode(",", $array);
    
    echo $comma_separated; // lastname,email,phone
    

    substr — 返回字符串的子串

    $rest = substr('abcdef', 1);     // bcdef
    $rest = substr('abcdef', 1, 3);  // bcd
    $rest = substr("abcdef", 0, -1);  // 返回 "abcde"
    $rest = substr("abcdef", 2, -1);  // 返回 "cde"
    $rest = substr("abcdef", 4, -4);  // 返回 ""
    $rest = substr("abcdef", -3, -1); // 返回 "de"
    

    mb_substr — 获取部分字符串

    echo mb_substr('后盾人', 1, 1, 'utf-8'); //盾
    

    strstr — 查找字符串的首次出现

    $email  = 'name@example.com';
    $domain = strstr($email, '@');
    echo $domain; // 打印 @example.com
    

    strrchr — 查找指定字符在字符串中的最后一次出现

    echo strrchr('hdcms.jpg', '.'); // .jpg
    

    strpos — 查找字符串首次出现的位置,如果没找到,将返回 FALSE

    echo strpos('houdurnen.com', 'o'); // 返回1
    

    strrpos — 计算指定字符串在目标字符串中最后一次出现的位置

    echo strrpos('houdurnen.com', 'o'); // 返回11
    

    str_replace — 子字符串替换

    echo str_replace('houdunren', 'hdcms', 'houdunren.com'); //返回 hdcms.com
    
    echo str_replace(['小猫','小狗'], '*', '我家有一只可爱的小猫和小狗');//我家有一只可爱的*和*
    
    echo str_replace(['小猫','小狗'], ['猫猫','旺旺'], '我家有一只可爱的小猫和小狗'); //我家有一只可爱的猫猫和旺旺
    

    NULL

    NULL数据类型只有一个值NULL。

    1. 变量未被赋予任何值
    2. 变量被赋值为NULL
    3. 被unset()函数处理后的变量
    $a;		//变量 $a未被赋予任何变量,值为NULL
    $b = NULL;	//变量 $b被赋值为NULL
    $c = 10;		
    
    unset($c);	
    //使用unset()函数处理后,$c为NULL 
    

    相关函数

    getType()

    $num = 1234; 
    $type = gettype($num); 
    var_dump($type);
    

    检测是否为布尔型

    $var = true;
    $bool = is_bool($var);
    var_dump($bool);
    

    检测是否为整型

    $int = 1234; 
    $bool = is_int($int); 
    var_dump($bool);
    

    检测是否为浮点数

    $num = 1.1234; 
    $bool = is_float($num); 
    var_dump($bool);
    

    检测是否为字符串

    $string = 'houdunwang'; 
    $bool = is_string($string); 
    var_dump($bool);
    

    检测是否为NULL

    $var = null;
    $bool = is_null($var);
    var_dump($bool);
    

    类型转换

    自动转换

    PHP类型根据值,自动转换

    $num1 = '1'; 
    $num2 = '2'; 
    echo $num1 + $num2; # 字符串转为数字相加
    

    强制转换

    settype($var,'type'); # type类型为integer、double、string、array 与 object
    
    $var = '123'; 
    
    settype($var,’integer’);
    var_dump($var); 就会变成int类型
    
    intval() $var = '123'; 
    var_dump(intval($var));
    
    floatval() $var = '1.23';
    var_dump(floatval($var));
    
    strval() $var = 123;
    var_dump(strval($var));
    

    常量使用

    常量是一个简单值的标识符(名字)。常量默认为大小写敏感。按照惯例常量标识符总是大写的。

    常量特性

    • 常量前面没有美元符号($)
    • 常量只能用define() 函数定义,而不能通过赋值语句
    • 常量一旦定义就不能被重新定义或者取消定义
    • 常量的值用来定义 整型,浮点,字符串,布尔值,数组(PHP7新增)
    • 常量可以不用理会变量范围的可以在任何位置访问

    声明常量

    常量可以使用 constdefine 定义。

    • const 是语言结构,在编译时要比define快
    • define 可以设置第三个参数为true,来定义不区分大小写的常量
    • 类文件中定义常量也使用const,所以const统一易读
    define('常量名',值); 
    define('WEBNAME','houdunwang');
    echo WEBNAME;
    

    常量检测

    $bool = defined('WEBNAME');
    var_dump($bool); // 结果是false
    

    系统常量

    __DIR__			文件所在目录
    __FILE__		文件路径
    __LINE__		程序代码行号
    PHP_VERSION 	显示PHP版本
    PHP_OS   		显示服务器的操作系统版本
    TRUE			boolean值真(true)支持小写常量
    FALSE 			boolean值假(false)支持小写常量
    __FUNCTION__	函数名称
    __METHOD__		方法名称
    __CLASS__		类名称
    

    使用函数 get_defined_constants(true) 可以获取当前可使用的所有常量。

    运算符

    算术运算符

    运算符 说明
    $a+$b 加法 $a和$b的和
    $a-$b 减法 $a和$b的差
    $a*$b 乘法 $a和$b的积
    $a/$b 除法 $a除以$b的商
    $a%$b 取模 $a除以$b后的余
    ++$a 前加 $a 的值先加一,然后进行操作
    $a++ 后加 $a 的值先进行操作,后加一
    --$a 前减 $a 的值先减一,然后进行操作
    $a-- 后减 $a 的值先进行操作,后减一

    赋值运算符

    运算符 说明
    = 右边值赋值给左边变量
    += 左边值加上右边值赋值给左边变量
    -= 左边值减掉右边值赋值给左边变量
    *= 左边值乘以右边值赋值给左边变量
    /= 左边值除以右边值赋值给左边变量
    .= 左边字符串连接到右边变量后面
    %= 左边值对右边值取余数后赋值给左边变量

    字符串运算符

    运算符 说明
    . 它返回其左右参数连接后的字符串
    .= 左边字符串连接到右边变量后面

    比较运算符

    运算符 说明
    $a==$b 等于 TRUE,如果$a等于$b
    $a===$b 全等于 TRUE,如果$a等于$b,并且类型也相同
    $a!=$b 不等 TRUE,如果$a不等于$b
    $a<>$b 不等 TRUE,如果$a不等于$b
    $a!==$b 非全等 TRUE,如果$a不等于$b,或者类型不同
    $a<$b 小于 TRUE,如果$a严格小于$b
    $a>$b 大于 TRUE,如果$a严格$b
    $a<=$b 小于等于 TRUE,如果 $a 小于或者等于$b
    $a>=$b 大于等于 TRUE,如果 $a 大于或者等于$b

    逻辑运算符

    运算符 说明
    $a and $b 逻辑与 TRUE,如果 $a 与 $b 都为 TRUE
    $a or $b 逻辑或 TRUE,如果 $a 或 $b 任一为TRUE
    !$a 逻辑非 TRUE,如果 $a 不为 TRUE
    $a && $b 逻辑与 TRUE,如果 $a 与 $b 都为TRUE
    $a || $b 逻辑或 TRUE,如果 $a 或 $b 任一为TRUE

    and与&& 、or与||是同一逻辑运算符的两种写法,但优先级不同。

    这四个符号的优先允许从高到低是:&&、||、AND、OR。

    三元表达式

    变量=(表达式)?值1:值2; 当表达式的返回值为true时,$变量被赋予值1,否则被赋予值2

    echo true?'向军':'后盾人'; //返回向军
    

    ?? 与 ?:

    $var=0;
    echo $var?:'大叔'; #输出大叔
    
    $var=0;
    echo $var??'大叔';#输出0
    

    PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式。 ?: 只判断 true 或 false ,而 ?? 判断变量存在并且值不为null

    屏蔽错误

    @ 运算符用于屏蔽表达式警告错误

    @(20/0); 
    

    流程控制

    if/else/elseif

    当条件表达式的值为真(true)时,PHP将执行语句组,相反条件表达式的值为假(false)时,PHP将不执行语句组,忽略语句组执行下面的语句。

    if (true) {
        echo '向军大叔';
    } else {
        echo '不成立';
    }
    
    //也可以使用以下写法
    if (true) :
        echo '向军大叔';
     else :
        echo '不成立';
     endif;
    

    elseif

    $age = 10;
    if ($age<=15) {
        echo '儿童';
    } elseif ($age<=30) {
        echo '青年';
    } elseif ($age<=50) {
        echo '中年';
    } else {
        echo '尊敬的老人';
    }
    
    //也可以使用以下写法
    $age = 10;
    if ($age<=15) :
        echo '儿童';
    elseif ($age<=30) :
        echo '青年';
    elseif ($age<=50) :
    	echo '中年';
    else :
        echo '尊敬的老人';
    endif;
    

    switch

    switch设置多个执行代码块,break指令终止向下执行,default为上面条件都不满足时执行的默认代码块。

    switch ($status) {
    case 'success':
        echo '成功';
        break;
    case 'error':
        echo '错误';
        break;
    case 'warning':
        echo '警告';
        break;
    }
    
    //也可以使用以下写法
    switch ($status) :
        case 'success':
            echo '成功';
            break;
        case 'error':
            echo '错误';
            break;
        case 'warning':
            echo '警告';
            break;
    endswitch;
    

    while

    当while循环语句中表达式(循环控制语句)的结果为真时,程序将反复执行同一段程序:循环体( while中的语句或语句序列),直到满足一定的条件(表达式的结果为假时)后才停止执行该段程序。

    $num = 10;
    while ($num>0) {
        echo($num--).'<br/>';
    }
    
    //也可以使用以下写法
    $num = 10;
    while ($num>0):
        echo($num--).'<br/>';
    endwhile;
    

    do...while

    与while的差别是条件后判断。

    $num = 10;
    do {
        echo($num--).'<hr/>';
    } while ($num>0);
    

    for

    for(表达式1;表达式2;表达式3){
    	语句或语句序列;
    }
    // 表达式1为循环初始条件;
    // 表达式2为循环控制条件;
    // 表达式3为控制变量递增;
    for ($num=10;$num>0;$num--) {
        echo $num.'<hr/>';
    }
    // 也可以使用以下写法
    for ($num=10;$num>0;$num--) :
        echo $num.'<hr/>';
    endfor;
    

    break 与 continue

    **break **

    我们之前在 switch 条件判断中已经使用过 break 关键字,它会使得程序流程离开 switch 本体中的语句,如果 break 使用在 for、while 或 do-while 循环结构中时,将会使得程序离开该层循环。

    do {
        if (!isset($num)) {
            $num=10;
        }
        if ($num==0) {
            break;
        }
        echo($num--).'<hr/>';
    } while (true);
    

    break 在多层循环嵌套使用时,可以指定跳转出层数。

    $num=0;
    while (true):
        $num++;
        switch ($num) {
            case $num%2==0:
                echo $num."<hr/>";
                break;
            case $num%15==0:
                echo $num."<hr/>";
                break 2;
        }
    endwhile;
    

    continue

    continue 的作用与 break 有点类似,continue 若使用在 for、while 或 do-while循环结构中,当程序执行至 continue 时,之后的语句将直接被略过,而直接执行下一次的循环动作。

    for ($num=10;$num>0;$num--) {
        if(!($num%2))continue;
        echo $num.'<hr/>';
    }
    

    文件引入

    include & require

    使用include和require 将文件导入,就像把该文件粘贴到使用函数的地方。

    include( )与require ( )区别在于错误处理方式,当引入产生错误时include( )产生一个警告而require( )则导致一个致命错误。

    include './test.php'; 
    echo 'test'; //如果test.php文件不存在会报一个warning错误,但是可以输出test
    

    可以使用 @ 屏蔽incluce加载警告错误

    if (!@include 'a.php') {
        echo '文件不存在';
    }
    

    require 加载失败时将终止程序执行

    require './test.php'; 
    echo 'test'; //如果test.php文件不存在会报一个fatal错误,不可以输出test
    

    include_once和require_once

    与include( )语句及require( )区别是如果文件已经加载过,则不会重复加载文件。

    // 因为 include 每次都加载所以下面两行代码执行会报错
    include './functions.php';
    include './functions.php'; 
    
    //下面使用 include_once 就不会报错
    include_once './functions.php';
    include_once './functions.php';
    

    日期时间

    日期与时间是常用的数据属性,比如二手车平台新车上架时间,社区平台的发贴时间等。

    时区

    时间根据不同国家以时区划分,下面是中国可用的时区。因为我国不区分时区所以以下用哪个都可以。

    时间 说明
    PRC People’s Republic of China,中华人民共和国
    Asia/chongqing 重庆
    Asia/shanghai 上海
    Asia/urumqi 乌鲁木齐

    设置时区

    1. PHP.ini配置(不推荐使用,因为有些服务器是改不了配置项的)date.timezone = PRC
    2. 脚本中修改 (推荐使用)
    • date_default_timezone_get()取得当前使用时区

    • date_default_timezone_set()设定当前使用时区

    • date_default_timezone_set("PRC");
      echo date('y-m-d H:i:s');
      

    UNIX时间戳

    PHP的时间戳开始于1970年1月1日零点,默认为10位整数数值。

    time

    返回当前Unix 时间戳秒数,1毫秒等于一千分之一秒。

    echo time();
    

    microtime

    返回当前 Unix 时间戳和微秒数。1微秒等于一百万分之一秒。

    list($usec, $sec) = explode(" ", microtime());
    echo $sec.':'.$usec;
    

    设置参数为TRUE返回浮点数

    echo microtime(true);
    

    脚本执行时间

    function runtime($start=null, $end=null)
    {
        static $cache=[];
        if (is_null($start)) {
            return $cache;
        } elseif (is_null($end)) {
            return $cache[$start] = microtime(true);
        } else {
            $end = $cache[$end]??microtime(true);
            return $end-$cache[$start];
        }
    }
    //record
    runtime('for');
    for ($i=0;$i<20000000;$i++):
        $i++;
    endfor;
    
    //record
    runtime('while');
    $n=0;
    while ($n<20000000):
        $n++;
    endwhile;
    
    echo runtime('for', true);
    echo '<hr/>';
    echo runtime('while', true);
    

    date

    格式化一个本地时间/日期

    echo date('Y-m-d h:i:s');
    

    通过第二个参数设置处理的时间

    echo date('Y-m-d', time()-3600*24*100);
    

    参数说明

    参数 说明 返回值
    Y 4 位数字完整表示的年份 例如:19992003
    y 2 位数字表示的年份 例如:9903
    m 数字表示的月份,有前导零 0112
    n 数字表示的月份,没有前导零 112
    d 月份中的第几天,有前导零的 2 位数字 0131
    j 月份中的第几天,没有前导零 1 到 31
    H 小时,24 小时格式,有前导零 0023
    h 小时,12 小时格式,有前导零 01 到 12
    i 有前导零的分钟数 00 到 59
    s 秒数,有前导零 00 到 59

    getdate

    取得日期/时间信息

    print_r(getdate(strtotime("+1 day"))); //获取1天后的时间数据
    

    strtotime

    将任何字符串的日期时间描述解析为 Unix 时间戳

    // ISO格式时间转为时间戳
    echo strtotime('2022-1-20 03:22:12');
    echo '<br/>';
    echo date("Y-m-d h:i:s", 1547954532);
    
    //当前时间戳
    echo strtotime('NOW');
    echo '<br/>';
    echo date("Y-m-d H:i:s", strtotime('NOW'));
    

    时间计算

    可以获取计算后的时间格式参数

    //1年加1天后的时间戳
    echo strtotime('+1 day +1 year');
    echo '<br/>';
    echo date("Y-m-d H:i:s", strtotime('+1 day +1 year'));
    
    //下周五
    echo date("Y-m-d H:i:s", strtotime('next friday'));
    

    对象操作

    PHP提供了面向对象的操作日期时间的方式,Carbon 就是基于PHP内置对象的开源产品,功能丰富使用简单,具体Carbon课程请登录 后盾人 查看学习。

    简单使用

    //定义时区,当然也可以使用date_default_timezone_set函数的
    $prc = new DateTimeZone('PRC');
    $dateTime = new DateTime();
    $dateTime->setTimezone($prc);
    echo $dateTime->format('Y-m-d H:i:s');
    
    //直接设置时间
    $dateTime = new DateTime('2025-2-12 3:22:12');
    echo $dateTime->format('Y-m-d H:i:s');
    //输出时间戳
    echo $dateTime->format('U');
    
    //重新时期与时间
    $dateTime->setDate(2019, 10, 1);
    $dateTime->setTime(10, 22, 12);
    echo '<br/>';
    echo $dateTime->format('Y-m-d H:i:s');
    

    根据时间戳生成时期

    $dateTime = new DateTime();
    $dateTime->setTimestamp(time());
    echo $dateTime->format('Y-m-d H:i:s');
    

    创建不规则时间

    根据给定的格式解析日期时间字符串,用于对不规则日期时间格式处理。

    $dateTime = DateTime::createFromFormat('Y/m-d His', '2020/12-13 081253');
    echo $dateTime->format('Y-m-d H:i:s');
    

    获取时间差

    $dateTime1 = new DateTime();
    $dateTime2 = new DateTime('2019-9-2');
    $interval = $dateTime1->diff($dateTime2);
    $format = '距离生日还有 <span style="color:red">%m个月%d天%h小时%i分钟%s秒</span> <br/>共%R%a天';
    echo $interval->format($format);
    

    说明 %R 显示+或-表示大于或小于,%a相差天数。

    添加时间

    格式以字母P开始后面跟着一个周期指示器。如果包含时间元素则以字母T开始。比如 P2DT3H表示间隔2天3小时。

    $date = new DateTime();
    $interval = new DateInterval('P2DT2H5M');
    echo $date->format('Y-m-d H:i')."<br/>";
    
    //增加时间
    $date->add($interval);
    echo $date->format('Y-m-d H:i');
    
    //减少时间
    echo "<br/>";
    echo (new DateTime())->sub($interval)->format('Y-m-d H:i');
    

    数学函数

    PHP提供了丰富的数学操作函数,下面我们介绍常用的函数使用,其他函数使用请参考手册

    ceil

    进一法取整

    echo ceil(10.2); //输出11
    

    floor

    向下取整

    echo floor(10.2); //输出10
    

    max

    找出最大值

    echo max(1, 3); //返回3
    

    min

    找出最小值。

    echo min(1, 3);//返回1
    

    下面是获取页码的逻辑,并对用户参数进行了验证处理,防止出现负数与超过总页码100的数值。

    echo  min(100, max(1, $_GET['page']??1));
    

    round

    对浮点数进行四舍五入处理。

    echo round(12.567, 2);
    

    mt_rand

    生成更好的随机数,下面是生成验证码随机数示例。

    function code(int $len=5):string
    {
        $str = 'abcdefghknm12345678';
        $code = '';
        for ($i=0;$i<$len;$i++) {
            $index = mt_rand(0, strlen($str)-1);
            $code.=strtoupper($str[$index]);
        }
        return $code;
    }
    echo code(5);
    
  • 相关阅读:
    springmvc @ResponseBody返回json 报406 not acceptable
    Java连接mysql中遇到的一些问题及解决方法
    nginx + keepalive 实现高可用
    nginx 内置变量
    nginx 防盗链
    nginx 跨域设置
    nginx 跨域设置
    nginx 日志分割
    servlet 下载地址 jcp
    图片压缩 jdk 1.8兼容问题
  • 原文地址:https://www.cnblogs.com/pengcode/p/12584540.html
Copyright © 2020-2023  润新知