PHP学习笔记(一)--基础知识

1、编译器中出现中文乱码

如果编辑环境中输入的中文编程乱码,可以在“Edit”à”Set Encoding”,设置编码为“GBK”,如下:

如果运行输出窗口中文为乱码,则可以右击工程文件,”Properties’à”PHP Debug”à”Encoding Setting”,设置为”GBK”(如果下拉选项没有”GBK”,可以手动输入),如下:

 

注意:如果页面及php使用utf-8编码,则获取的数据库数据会变成乱码,sql server默认编码为gb2312。

2、变量及注释

1)注释

注释有三种:

//用于单行注释,注释内容中不可出现?>

/*  */用于多行注释

#用于单行注释

2)变量类型

PHP中有8种变量类型:boolean,integer,float/double,string,array,object,resource和null;

PHP中变量类型不是由程序设定,而是PHP根据程序运行上下文确定;

PHP中变量都是以$符号开头;

字符串变量定义可以使用’(单引号)也可以使用”(双引号),一般定义字符串建议使用单引号,在单引号定义的字符串为原生字符串,转义符号不再具有转义作用,并且变量放在单引号字符串中不会将变量替换成实际的数值;

如果定义的数值超过了int所能表示的最大范围,将会被单做float类型处理。如果表达式运算最后结果超出了int范围也会返回float型;

可变变量是一种独特的变量,它允许动态的改变一个变量的名称,改变量的名称由另外一个变量的值来确定;

PHP中连接两个字符串使用.(点号),而不能使用+(加号);

如果“+”号两边有字符类型,则自动转换为整型。如果是字母则输出0,如果以数字开头的字符串,自会截取字符串头部的数字再进行运算。

 

【例1】变量定义

<?php

    $name='i love php!';

    echo '$name';//输出$name

    echo "$name";//输出i love php!

   

    echo "hello\nworld";//\n为转义字符

    echo 'hello\nword';//\n原样输出

   

    $number1=123;//定义十进制整数

    $number2=0123;//定义八进制整数

    $number3=0x123;//定义十六进制整数

    $number4=0.123;//定义浮点数

    $number5=2.3E+3;//$number5=2300

    $number6=2.3E-2;//$number6=0.023

   

    $array1=array('武汉','广州','南京');//定义一维数组

    $array2=array(0=>'php',1=>'c#',2=>'java');//定义一维数组

    echo '<p>';//段楼开始标记

    echo $array1[1];//输出广州

    echo '<br/>';//换行符

    echo $array2[0];//输出php

    echo '</p>';//段落结束标记

   

$num1='5.23r*r';

    $num2=1;

    echo $num1+$num2;//输出6.23

?>

 

【例2】引用、静态变量及全局变量

<?php

    $str1="hello";

    $str2=$str1;//变量赋值

    $str2=& $str1;//引用赋值

    static $name='C#';//静态变量

   

    $score=80;

    function f(){

       $score=100;

       echo $score.'<br/>';//输出100

       global $score;//定义全局变量

       echo $score;//输出80

    }

    f();//调用函数

?>

 

【例3】可变变量

<?php

    $name='wit';

    $wit='hello,word';

    echo $name.'<br/>';//输出wit

    echo $$name;//输出hello,word

?>

 

 

3、常用函数

 

函数

说明

is_null()

判断是否为空,当变量值为null,””(空串)或者0等时返回true

unset()

销毁指定的变量

settype(mixed var,string type)

将指定的变量转换成指定的数据类型,settype($num,’integer’)

is_bool()

检测变量是否为布尔类型

is_integer()/is_int()

检测变量是否为整型

is_float()/is_double()

检测是否为浮点型

is_array()

检测变量是否为数组类型

is_object()

检测变量是否为对象类型

is_numeric()

检测变量是否为数字或者由数字组成的字符串

var_dump()

输出变量的相关信息,$age=12;var_dump($age)输出int(12)

rand(int mix,int max)

产生一个[mix,max]之间的随机整数,如果每餐参数则返回[0,RAND_MAX]之间的随机整数

iconv($in_charset, $out_charset, $str)

转换编码,in_charset为原来编码,out_charset为转换后的编码,$str为要转换的字符串

 

4、常量

1)定义常量,语法:

define(string constant_name,mixed_value,case_sensitive=true);

说明:第一个参数为常量名,第二个参数为常量值,第三个参数表示是否对大小写敏感(可选)。

2)获取常量的值,语法:

mixed constant(string const_name);

也可以通过常量名直接获取常量的值.

3)判断一个常量是否定义,语法:

bool defined(string const_name);

 

示例:

<?php

    define("$PI", 3.1415926);

    if(defined("$PI"))

    {

       echo $PI."<br/>";

       echo constant("$PI");

    }

?>

 

系统预定义的一些常量:

<?php

    echo constant("__FILE__");//输出PHP文件名

    echo constant(_LINE_);//输出PHP程序行数

    echo constant(PHP_VERSION);//PHP程序的版本

    echo constant(PHP_OS);//P执行PHP解析器的操作系统名

?>

 

5、运算符

位运算符

运算符

含义

运算符

含义

&

按位与

|

按位或

~

按位非

^

按位异或

<<

左移位

>>

右移位

 

逻辑运算符

运算符

含义

运算符

含义

&&

逻辑与

||

逻辑或

!

逻辑非

xor

逻辑异或

 

比较运算符

运算符

含义

运算符

含义

>

大于

>=

大于等于

<

小于

<=

小于等于

==

等于

!=

不等

===

恒等于

!==

非恒等

$a====$b要求$a与$b的值相等且变量类型相同;$a!==$b表示$a与$b的值不等或者类型不同。

 

错误控制符@

示例:

<?php

    $num1=12;

    $num2=$num1/0;//会输出警告信息

    $num3=@($num1/0);//不会输出任何信息

?>

 

三元运算符?:

示例:

<?php

    $num1=12;

    echo $num1%2==0 ? '偶数' : '奇数';

?>

 

6、定义函数

当函数使用默认参数时,默认参数必须放在非默认参数的后面;

变量函数是通过改变变量名实现的;

对函数的引用必须在两个地方都使用“&”符,用来说明返回的是引用。

示例:

<?php

    function fun1()

    {

       echo '函数fun1被调用';

    }

    function fun2($r){

       return 2*pi()*$r;

    }

    function fun3(& $num){//参数为引用类型

       $num=3;

    }

    function fun4($num1,$num2=2){//带默认参数的函数

       return $num1+$num2;

    }

    function come(){

       echo '函数come被调用';

    }

    function back($name){

       echo "$name";

    }

function &fun5($area){//对函数的引用

       return 2*$area;

    }

    fun1();

    fun2(3);

    $r=1;

    fun3($r);

    echo $r;//输出3

    $res=fun4(10);

    echo $res;

    $func="come";

    $func();//使用变量函数来调用come()

    $func="back";

    $func("lily");//使用变量函数来调用back("lily")

$area=&fun5(5);//对函数的引用

unset($area);//取消引用fun5

    echo $area;

?>

注:可以使用unset()方法取消对变量或者函数的引用。

 

7、流控制语句

【例1】if else结构

<?php

    $num=rand(1,3);

    if ($num==1) {

       echo '最小值';

    }

    elseif ($num==2){

       echo '中间值';

    }

    else {

       echo '最大值';

    }

?>

 

【例2】while,do while结构

<?php

    $num=rand(1,3);

    do {

       $num+=1;

       echo $num;

    }while ($num<3);

    echo '<br/>';

    while ($num>3){

       $num-=1;

       echo $num;

    }

?>

 

【例3】switch case结构

<?php

    $num=rand(1,4);

    switch ($num){

       case 1:

           echo '最小值';

           break;

       case 2:

           echo '中间值';

           break;

       case 3:

           echo '最大值';

           break;

       default:

           echo '不合要求';

    }

?>

 

【例4】foreach结构

foreach语法格式:

foreach(array_expression as $value)

foreach(array_expression as $key=>$value)

 

<?php

    $numArray=array(1,2,3,5);

    foreach ($numArray as $num){

       echo $num.';';

    }

    echo '<br/>';

    $name=array("1"=>"智能机器人","2"=>"数码相机","3"=>"手机");

    foreach ($name as $key=>$value){

       echo ':'.$key.';:'.$value.'<br/>';

    }

?>

 

【例5】流程控制语句另一种写法

使用“:”(冒号)代替左边的大括号“{”,使用endif;、endwhile;、endfor;、endforeach;和end switch;代替右边的大括号“}”。

 

<?php

    $numArray=array(1,2,3,5);

    for($index=0;$index<count($numArray);$index++):

       echo $numArray[$index].';';

    endfor;

    echo '<br/>';

    $name=array("1"=>"智能机器人","2"=>"数码相机","3"=>"手机");

    foreach ($name as $key=>$value):

       echo ':'.$key.';:'.$value.'<br/>';

    endforeach;

?>

 

【例6】使用break、continue跳出循环语句

break N;可以跳出N重循环

continue N;可以跳出N重循环

<?php

    $arr=array("A","B","C","D","E","F","G","H","I","J");

    for($i=0;$i<10;$i++){

       echo '<br/>';

       if($i%2==0){

           continue;

       }

       for($j=0;$j<count($arr);$j++){

           if($i==$j){

              continue 2;

           }

           else {

              echo 'arr['.$j.']='.$arr[$j].' ';

           }

       }

    }

?>

输出结果为:

 

8、字符串操作

  1. 去除空格或特殊字符
  • trim(string str[,string charlist]);     

说明:用于去除首尾空格或特殊字符,如果不设置参数charlist则所有的可选字符都将被删除

charlist可选值

可选值

说明

可选值

说明

\0

null,空值

\0xB

垂直制表符

\t

ab,制表符

\r

回车符

\n

换行符

“ ”

空格

除了上面的可选值外还尅在charlist参数中设置要去除的自己定义的字符。

 

  • ltrim(string str[,string charlist]);

说明:去除字符串左边的空格和特殊字符

  • rtrim(string str[,string charlist]);

说明:去除字符串右边的空格和特殊字符

 

示例:

<?php

    $value='(:@i love php!#:)';

    echo trim($value,"(:@#:)");//输出i love php!

    echo '<br/>';

    echo ltrim($value,"(:)");//输出@i love php!#:)

    echo '<br/>';

    echo rtrim($value,"#:)");//输出(:@i love php!

?>

 

  1. 转义与还原字符串
  • string addslashes(string str)函数用来转义字符串;
  • striing stripsslashes(string str)函数用来将addslashes()函数转义后的字符串还原。

注:所有数据在插入到数据库之前应该进行转义,避免注入式攻击。

示例:

<?php

    $str="select * from student where name='php'";

    echo addslashes($str);//输出select * from student where name=\'php\'

    echo stripslashes(addslashes($str));//输出select * from student where name='php'

    $str2="select * from student where name=\'php\'";

    echo addslashes($str2);//输出select * from student where name=\\\'php\\\'

    echo stripslashes($str2);//输出select * from student where name='php'

?>

 

  • string addcslashes(string str,string charlist)

 参数str为要转义的字符串,charlist指定在字符串中的哪些字符前加上转义符“\”,如果charlist中包含\n,\r等字符则将以C风格进行转换,而其它非字母数字且ASCII低于32或高于126的字符均转换成八进制表示。

  • striing stripcsslashes(string str)函数用来将addslashes()函数转义后的字符串还原。

用来将addcslashes()转义的字符串还原。

 

示例:

<?php

    $str="select * from student where name='张三'";

    $res=addcslashes($str,"张三");

    echo $res;//输出select * from student where name='\325\305\310\375'

    echo '<br/>';

    echo stripcslashes($res);//输出select * from student where name='张三'

    echo '<br/>';

    $str2=addcslashes($str,"from");

    echo $str2;//输出select * \f\r\o\m student whe\re na\me='张三'

    echo '<br/>';

    echo stripcslashes($str2);//输出select * om student whe e name='张三'

?>

注:一般对缓存数据的值采用addcslashes()函数进行指定范围的转义

 

  1. 截取字符串及比较字符串
  • int strlen(string str)获取字符串长度
  • string substr(string str,int start[,int length])

参数

说明

str

指定字符串对象

start

指定开始截取字符串的位置。如果参数start为负,则从字符串的末尾开始截取。从0开始计数。

length

可选参数,指定截取字符的个数,如果为负数,则表示取到倒数第length个字符

注:使用substr()函数截取中文字符串,如果截取的字符串个数是奇数,会导致出现乱码。

 

示例:

<?php

    $str="I love php";

    echo substr($str, 2,strlen($str)-2);//输出love php

    echo '<br/>';

    echo substr($str, -3,3);//输出php,从倒数第3个字符开始截取,截取长度为3

    echo '<br/>';

    echo substr($str, 2,-1);//输出love ph,从第二个开始截取,取到倒数第1

?>

 

  • int strcmp(string str1.string str2);

如果str1大于str2则返回值大于0,如果str1等于str2则返回值等于0,否则返回值小于0.比较区分大小写。

 

  • int strcasecmp(string str1.string str2);

与strcmp不同的时,该函数不区分大小写。

 

  • int strnatcmp(string str1.string str2);

按照自然排序法进行字符串的比较。自然排序法比较是字符串中的数字部分,将字符串中的数字按照大小进行比较。区分大小写。

 

  • int strncmp(string str1.string str2);

比较字符串中的前n个字符。

 

示例:

<?php

    $str1="I love php";

    $str2="I like php";

    echo strcmp($str1, $str2);//输出1

    echo '<br/>';

    echo strncmp($str1, $str2,3);//输出0

    echo '<br/>';

   

    $str1="I love php12";

    $str2="I love php3";

    echo strcmp($str1, $str2);//输出-1

    echo '<br/>';

    echo strnatcmp($str1, $str2);//输出1

    echo '<br/>';

?>

 

  1. 检索字符串与替换字符串
  • string str(string source,string needle);

获取source中needle首次出现的位置到needel末尾的子字符串。如果执行成功返回子字符串,否则返回false.区分大小写

<?php

    $source="I love php";

    $needle="ve";

    echo strstr($source, $needle);//输出ve php

?>

 

  • mixed  str_ireplace(mixed search,mixed replace,mixed subject[,int &count]);

说明:在subject中使用replace替换search。在替换时不区分大小写

 

  • mixed  str_replace(mixed search,mixed replace,mixed subject[,int &count]);

说明:在subject中使用replace替换search。在替换时区分大小写

<?php

    $str="武汉大学";

    $search="武汉";

    $replace="**";

    $result=str_replace($search, $replace,$str);

    echo $result;//输出**大学

?>

 

  • string substr_replace(string str,string repl,int start[,int length]);

参数说明:

参数

说明

str

要操作的原始字符串

repl

指定替换后的新字符串

start

指定替换字符串的开始位置。正数表示起始位置从字符串开头开始,负数表示起始位置从字符串的结尾开始。0表示起始位置的第一个字符

length

可选参数,指定替换字符串的长度。默认是整个字符串。整数表示起始位置从字符串开头开始,负数表示起始位置从字符串的结尾开始。0表示插入而非替换

 

<?php

    $str="武汉某某大学";

    $repl="广州";

   

    $result=substr_replace($str, $repl,0,8);

    echo $result;//输出广州大学,一个汉字占两个字符

    echo '<br/>';

    $result=substr_replace($str, $repl, -2,4);

    echo $result;//输出武汉某某大广州

   

    echo '<br/>';

    $result=substr_replace($str, $repl, 0,0);

    echo $result;//输出广州武汉工程大学

   

    echo '<br/>';

    $result=substr_replace($str, $repl, 0,-4);

    echo $result;//输出广州大学

?>

 

  1. 分割与合并字符串
  • array explode(string separator ,string str[,limit]);

参数说明:

参数

说明

separator

指定的分割的标识符,如果separator所包含的值在str中找不到,则返回包含str单个元素的数组

str

指定要进行分割的字符串

limit

可选参数,如果设置了limit参数,则返回的数组中包含最多limit个元素,而最后的元素将包含str的剩余部分;如果limit是负数,则返回除了最后的-limit个元素以外的所有元素

 

  • string implode(string glue,array pieces );

 

示例:

<?php

    $str='PHP编程@java程序设计@C++语法';

    $arr=explode("@",$str);

    print_r($arr);//数组有3个元素:PHP编程;java程序设计;C++语法

    $res=implode("#",$arr);

    print_r($res);//$res=PHP编程#java程序设计#C++语法

?>

 

9、POSIX扩展正则表达式函数

  • bool ereg/eregi(string pattern,string str[,array regs])

参数说明:

在字符串str中匹配表达式pattern,如果匹配成功返回true,否则返回false。如果有第3个参数,则将成功匹配的字符串按子串划分并存储到regs数组中。ereg()区分大小写,eregi()不区分大小写。

<?php

    $ereg='^[$][[:alpha:]_][[:alnum:]]*';

    ereg($ereg,'$_name',$register);

    print_r($register);//输出Array ( [0] => $_name )

?>

 

  • string ereg_replace/eregi_replace(string pattern,string replacement,string str)

在字符串str中匹配pattern表达式,匹配成功后替换为replacement,并返回替换后的字符串。

 

  • string split/spliti(string pattern,string str[,int limit])

使用表达式pattern分割字符串str。如果有参数limit,则返回的数组中包含最多limit个元素,而最后的元素将包含str的剩余部分;如果limit是负数,则返回除了最后的-limit个元素以外的所有元素。

 

10、PRICE兼容正则表达式函数

  • array  preg_grep(string pattern,array input)

使用数组中的元素一一匹配表达式pattern,最后返回所有相匹配的元素组成的数组。

示例:

<?php

    $preg='/\d{3,4}-?\d{7,8}/';

    $arr=array('0131231231','7980009-12312','909-12345678');

    $preg_arr=preg_grep($preg, $arr);

    print_r($preg_arr);//输出Array ( [0] => 0131231231 [2] => 909-12345678 )

?>

 

  • int  preg_match/preg_match_all(string pattern ,string subject[, array matches]);

在字符串subject中匹配表达式pattern。函数返回匹配成功的次数。如果有数组matches,则每次匹配的结果都存储到数组matches中。preg_match返回的值是0或者1,如果匹配成功就停止,preg_match_all一直匹配到最后。

<?php

    $preg='/\b\w{2}\b/';

    $str='This is an example';

    $num1=preg_match($preg, $str,$str1);

    echo $num1.'<br/>';

    print_r($str1);

    echo '<br/>';

    $num2=preg_match_all($preg, $str,$str2);

    echo $num2.'<br/>';

    var_dump($str2);

?>

 

  • string  preg_quote(string str [, string delimiter]);

将字符串str中的所有特殊字符进行自动转义。如果有参数delimiter,那么参数所包含的字符也将被转义,返回转义后的字符串。

<?php

    $str1='!$@#+[yu';

    $str2='u';

    $res=preg_quote($str1,$str2);

    echo $res;

?>

结果:

注:这里的特殊字符是值正则表达式中具有一定意义的元字符,其它如“@”、“#”等不会被当作特殊字符处理。

 

  • mixed preg_replace(mixed pattern ,mixed replacement ,mixed subject [, int limit]);

在字符串subject中匹配表达式pattern,如果匹配成功用replacement替换,如果设置参数limit,则替换limit次。

 

  • mixed preg_replace_callback(mixed pattern ,callback callback ,mixed subject [, int limit]);

与preg_replace作用相同,不同的是preg_replace_callback使用一个回调函数(callback)来代替replacement参数。

<?php

    function c_back($str){

       $str="<font color=$str[1]>$str[2]</font>";

       return $str;

    }

    $string ='[color=blue]字体颜色[/color]';

    echo preg_replace_callback('/\[color=(.*)\](.*)\[\/color\]/U', "c_back", $string);//输出字体颜色,并且速出内容为蓝色字体

?>

 

  • array  preg_split(string pattern,  string subject [, int limit]);

使用表达式pattern来分割字符串subject。如果有参数limit,那么数组最多有limit元素。使用与split()函数相同。

 

11、数组

PHP中数组分为索引数组和关联数组。索引数组用数字作为键,关联数组 用字符串作为键;

默认数组下标从1开始;

使用list()函数可以遍历数组,list()函数不是真正的函数,是一种语言结构。list()函数仅能用于数字索引且索引值从0开始的数组。

【例1】一维数组定义及遍历

<?php

    $arr1=array('张三','李斯','赵柳');//索引数组

    print_r($arr1);

    echo '<br/>';

   

    $arr2=array(1=>'武汉',2=>'广州',3=>'深圳');

    for ($index=1;$index<=count($arr2);$index++){

       echo $arr2[$index].';';

    }

    echo '<br/>';

   

    $arr3=array('hight'=>'优秀','middle'=>'','low'=>'');//关联数组

    foreach ($arr3 as $key=>$value){//输出

       echo ':'.$key.';:'.$value.'<br/>';

    }

   

    //$arr4=arry();

    $arr4[0]='C++';

    $arr4[1]='C#';

    $arr4[2]='php';

    $arr4[3]='javascript';

    foreach ($arr4 as $value){//输出

       echo $value.'<br/>';

    }

 

    while (list($name,$value)=each($arr4)){//输出

       echo '<'.$name.','.$value.'><br/>';

    }

 

?>

注:each()函数用于返回当前指针位置的数组值,同时将指针推进到下一个位置返回的数组包含4个键,键0和key包含键名,而键1和value包含相应的数据。如果程序在执行each()函数时指针已经位于数组末尾,则返回false.

 

【例2】二维数组定义及遍历

 

<?php

    $arr1=array(array('张三','李斯','赵柳'),array(1=>'武汉',2=>'广州',3=>'深圳'));//索引数组

    print_r($arr1);

    echo '总共有【'.count($arr1,COUNT_RECURSIVE).'】个元素';//结果为8

    echo '<br/>';

   

$arr3=array('hight'=>array(80,90,100),'middle'=>array(60,70),'low'=>array(50,40,30,20,10));//关联数组

    print_r($arr3);

   

?>

注:使用count()函数统计数组元素个数时,如果第二个参数取值为1(COUNT_RECURSIVE),则使用递归方式统计。对于二维数组来说必须使用1(COUNT_RECURSIVE).缺省为0.

 

【例3】查询数组中指定元素

<?php

    $arr1=array(array('张三','李斯','赵柳'),array(1=>'武汉',2=>'广州',3=>'深圳'));//索引数组

    echo array_search('广州',$arr1[1]);//返回2

?>

 

【例4】获取数组最后一个元素及向数组中添加元素

array_pop()函数获取并返回数组的最后一个元素,并将数组的长度减一。

<?php

    $arr1=array('张三','李思','南京','广州','武汉');

    echo array_pop($arr1);//输出武汉

    echo '<br/>';

    print_r($arr1);//输出Array ( [0] => 张三 [1] => 李思 [2] => 南京 [3] => 广州 )

    array_push($arr1, '长沙','珠海');

    print_r($arr1);

?>

 

【例5】删除数组中重复的元素

array_unique()删除数组中重复元素并返回删除重复元素后的数组,注意:原数组内容不变。

<?php

    $arr1=array('武汉','广州','南京','广州','武汉');

    array_push($arr1, '南京','珠海');

    $arr2=array_unique($arr1);

    print_r($arr2);//输出Array ( [0] => 武汉 [1] => 广州 [2] => 南京 [6] => 珠海 )

?>

 

12、日期与时间

  1. 获取时间戳

默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。

  • int mktime(int hour, int minute, int second, int month, int day, int year, int[id_list])

该函数返回一个长整数的时间戳,从1970年1月1日到给定时间的秒数。

<?php

    echo '返回时间戳'.mktime().'<p>';

    echo '当前日期:'.date("Y-m-d",mktime()).'<p>';//输出2015-01-29

    echo '当前时间:'.date("H:i:m",mktime());

?>

 

  • time()用于返回当前时间的时间戳,不带任何参数。

<?php

    echo '返回时间戳:'.time().'<p>';

    echo '当前日期:'.date("Y-m-d",time()).'<p>';

    echo '当前时间:'.date("H:i:m",time());

$nextWeek=time()+(7*24*60*60);//在当前时间戳上加上一周的时间

    echo date("Y-m-d",$nextWeek);

?>

 

  1. 获取日期及时间
  • date(string format[,int timestamp])

说明:

大写Y表示年四位数字,而小写y表示年的两位数字;

小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。

大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);

没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。

大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)

大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。

小结:

表示年可以用大写的Y和小写y;

表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);

表示日可以用小写d和小写j,大写S表示日期的后缀。

小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。

当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。

大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数

小结:

字母g表示小时不带前导,字母h表示小时带前导;

小写g、h表示12小时制,大写G、H表示24小时制。

<?php

    echo date("y-m-d h:i:s").'<p>';//15-01-29 04:39:22

    echo date("Y-n-j h:i:s").'<p>';//2015-1-29 04:39:22

    echo date("Y-M-D h:i:s").'<p>';//2015-Jan-Thu 04:43:40

    echo date("Y-F-jS h:i:s").'<p>';//2015-January-29th 04:45:41

    echo date("H:i:s").'<p>';//16:47:08

    echo date("g:i:s").'<p>';//4:47:08

    echo date("g:i:s A").'<p>';//4:47:08

?>

 

大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;

小写l表示当天是星期几的英文全写(Tuesday);

而使用大写D表示星期几的3个字符缩写(Tue)。

小写w表示星期几,数字形式表示

大写W表示一年中的星期数

小写t表示当前月份又多少天

小写z表示今天是本年中第几天

<?php

    echo date("L")."<p>";//0

    echo date('l')."<p>";//Thursday

    echo date('D')."<p>";//Thu

    echo date('w')."<p>";//2

    echo date('W')."<p>";//05

    echo date('t')."<p>";//31

    echo date('z')."<p>";//28

?>

 

  1. 获取日期及时间的信息
  • getdate() 函数取得日期/时间信息。

getdate(timestamp)

 

键名

说明

返回值例子

"seconds"

秒的数字表示

0 到 59

"minutes"

分钟的数字表示

0 到 59

"hours"

小时的数字表示

0 到 23

"mday"

月份中第几天的数字表示

1 到 31

"wday"

星期中第几天的数字表示

0(表示星期天)到 6(表示星期六)

"mon"

月份的数字表示

1 到 12

"year"

4 位数字表示的完整年份

例如:1999 或 2003

"yday"

一年中第几天的数字表示

0 到 365

"weekday"

星期几的完整文本表示

Sunday 到 Saturday

"month"

月份的完整文本表示

January 到 December

0

自从 Unix 纪元开始至今的秒数,和 time() 的返回值以及用于 date() 的值类似。

系统相关,典型值为从 -2147483648 到 2147483647。

 

<?php

    $arr=getdate();

    echo $arr[year]."-".$arr[mon]."-".$arr[mday]."<p>";

    echo $arr[hours].":".$arr[minutes].":".$arr[seconds];

?>

 

  1. 检查日期是否合法
  • checkdate() 函数验证一个格里高里日期。

日期在下列情况下为合法:

month 介于且包括 1 - 12

Day 的值在给定的 month 所应该具有的天数范围之内,闰年已经考虑进去了。

year 介于且包括 1 到 32767

参数

描述

month

必需。规定月。

day

必需。规定日。

year

必需。规定年。

 

<?php

    var_dump(checkdate(12,31,2000));//ture

    var_dump(checkdate(2,29,2003));//false

    var_dump(checkdate(2,29,2004));//true

?>

 

  1. 设置本地化环境

string  setlocale(string  category [,string location])

地区信息是针对一个地理区域的语言、货币、时间以及其他信息。

参数category可取值如下:

  • LC_ALL - 包括下面的所有选项
  • LC_COLLATE -排序次序
  • LC_CTYPE - 字符类别及转换(例如所有字符大写或小写)
  • LC_MESSAGES - 系统消息格式
  • LC_MONETARY - 货币格式
  • LC_N

 

<?php

    setlocale(LC_ALL,"en_US");//设置本地环境;

    echo "美国格式:".strftime("Today is %A");

    setlocale(LC_ALL,"chs");//设置本地环境;

    echo "中文简体格式:".strftime("Today is %A");

?>

输出结果:

  1. 格式化输出日期和时间

string strftime ( string $format [, int $timestamp = time() ] ) 函数根据区域设置格式化本地时间/日期。

format 里能够识别的格式字串有以下标记:

格式

描述

返回值示例

---

---

%a

当前区域星期几的简写

Sun 到 Sat

%A

当前区域星期几的全称

Sunday 到 Saturday

%d

月份中的第几天,十进制数字(范围从 01 到 31)

01 到 31

%e

月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31') 在 Windows 上尚未按描述实现。更多信息见下方。

1 到 31

%j

年份中的第几天,带前导零的三位十进制数(范围从 001 到 366)

001 到 366

%u

符合 ISO-8601 星期几的十进制数表达 [1,7],1 表示星期一

1 (星期一) 到 7 (星期日)

%w

星期中的第几天,星期天为 0

0 (星期天) 到 6 (星期六)

---

---

%U

本年的第几周,从第一周的第一个星期天作为第一天开始

13 (for the 13th full week of the year)

%V

%V - 本年第几周的 ISO-8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)

01 到 53 (where 53 accounts for an overlapping week)

%W

本年的第几周数,从第一周的第一个星期一作为第一天开始

46 (for the 46th week of the year beginning with a Monday)

---

---

%b

当前区域月份的简写

Jan 到 Dec

%B

当前区域月份的全称

January 到 December

%h

当前区域月份的简写(%b 的别名)

Jan 到 Dec

%m

两位数的月份

01 (是一月份) 到 12 (是十二月份)

---

---

%C

两位数显示世纪(年份除以 100,截成整数)

19 是 20 世纪

%g

2 位数的年份,符合 ISO-8601:1988 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。

比如:2009年1月6日那一周是 09

%G

%g 的完整四位数版本

比如:2009年1月3日那一周是 2008.

%y

两位数显示年份

比如: 09 是 2009,79是 1979

%Y

四位数显示年份

比如: 2038

时间

---

---

%H

以 24 小时格式显示两位小时数

00 到 23

%I

以 12 小时格式显示两位小时数

01 到 12

%l('L' 的小写)

以 12 小时格式显示小时数,单个数字前含空格

1 到 12

%M

两位的分钟数

00 到 59

%p

指定时间的大写 “AM” 或 “PM”

比如: 00:31 是 AM ,22:23 是PM

%P

指定时间的小写 “am” 或 “pm”

比如:00:31 是 am ,22:23 是pm

%r

和 "%I:%M:%S %p" 一样

比如: 21:34:17 是09:34:17 PM

%R

和 "%H:%M" 一样

比如: 12:35 AM 是00:35,4:44 PM 是 16:44

%S

两位数字表示秒

00 到 59

%T

和 "%H:%M:%S" 一样

比如: 09:34:17 PM 是21:34:17

%X

当前区域首选的时间表示法,不包括日期

例如: 03:59:16 或15:59:16

%z

从 UTC 的时区偏移 或 简写(由操作系统决定)

比如: 东部时间是-0500 或 EST

%Z

%z 没有给出的 UTC 的时区偏移 或 简写(由操作系统决定)

比如: -0500 或 EST 是东部时间

时间和日期戳

---

---

%c

当前区域首选的日期时间表达

比如: 2009 年 2 月 5 日上午 12:45:10 是 Tue Feb 5 00:45:10 2009

%D

和 "%m/%d/%y" 一样

比如: 2009 年 2 月 5 日是 02/05/09

%F

Same as "%Y-%m-%d" (commonly used in database datestamps)

比如:2009 年 2 月 5 日是 2009-02-05

%s

Unix纪元的时间戳(和 time() 函数一样)

比如: 1979 年 9 月 10 日上午 8 点 40 分 00 秒是 305815200

%x

当前区域首选的时间表示法,不包括时间

比如: 2009 年 2 月 5 日是 02/05/09

其他

---

---

%n

换行符("\n")

---

%t

Tab 字符("\t")

---

%%

文字上的百分字符("%")

---

 

<?php

    setlocale(LC_TIME, "C");

    echo strftime("%A")."<p>";

    setlocale(LC_TIME, "fi_FI");

    echo strftime(" in Finnish is %A,")."<p>";

    setlocale(LC_TIME, "fr_FR");

    echo strftime(" in French %A")."<p>";

    setlocale(LC_TIME, "de_DE");

    echo strftime(" in German %A.\n");

?>

 

  1. 将日期和时间解析为时间戳

int strtotime ( string $time [, int $now ] )

strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间。

一,获取指定日期的unix时间戳 strtotime("2009-1-22") 示例如下:

echo strtotime("2009-1-22") 结果:1232553600

说明:返回2009年1月22日0点0分0秒时间戳

二,获取英文文本日期时间 示例如下:

便于比较,使用date将当时间戳与指定时间戳转换成系统时间

(1)打印明天此时的时间戳strtotime("+1 day")

当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("+1 day")) 结果:2009-01-23 09:40:25

(2)打印昨天此时的时间戳strtotime("-1 day")

当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("-1 day")) 结果:2009-01-21 09:40:25

(3)打印下个星期此时的时间戳strtotime("+1 week")

当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("+1 week")) 结果:2009-01-29 09:40:25

(4)打印上个星期此时的时间戳strtotime("-1 week")

当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("-1 week")) 结果:2009-01-15 09:40:25

(5)打印指定下星期几的时间戳strtotime("next Thursday")

当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("next Thursday")) 结果:2009-01-29 00:00:00

(6)打印指定上星期几的时间戳strtotime("last Thursday")

当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("last Thursday")) 结果:2009-01-15 00:00:00

以上示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间。

 一,获取指定日期的unix时间戳 strtotime("2009-1-22") 示例如下:

  echo strtotime("2009-1-22") 结果:1232553600

  说明:返回2009年1月22日0点0分0秒时间戳

  二,获取英文文本日期时间 示例如下:

  便于比较,使用date将当时间戳与指定时间戳转换成系统时间

  (1)打印明天此时的时间戳strtotime("+1 day")

  当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

  指定时间:echo date("Y-m-d H:i:s",strtotime("+1 day")) 结果:2009-01-23 09:40:25

  (2)打印昨天此时的时间戳strtotime("-1 day")

  当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

  指定时间:echo date("Y-m-d H:i:s",strtotime("-1 day")) 结果:2009-01-21 09:40:25

  (3)打印下个星期此时的时间戳strtotime("+1 week")

  当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

  指定时间:echo date("Y-m-d H:i:s",strtotime("+1 week")) 结果:2009-01-29 09:40:25

  (4)打印上个星期此时的时间戳strtotime("-1 week")

  当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

  指定时间:echo date("Y-m-d H:i:s",strtotime("-1 week")) 结果:2009-01-15 09:40:25

  (5)打印指定下星期几的时间戳strtotime("next Thursday")

  当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

  指定时间:echo date("Y-m-d H:i:s",strtotime("next Thursday")) 结果:2009-01-29 00:00:00

  (6)打印指定上星期几的时间戳strtotime("last Thursday")

  当前时间:echo date("Y-m-d H:i:s",time()) 结果:2009-01-22 09:40:25

指定时间:echo date("Y-m-d H:i:s",strtotime("last Thursday")) 结果:2009-01-15 00:00:00

 

  1. 时间大小的比较

使用strtotime可以实现时间的比较

<?php

    $time1=date("Y-m-s H:i:s");

    $time2="2008-2-3 16:30:02";

    $res=strtotime($time1)-strtotime($time2);

    echo $res;

?>

如果time1早于time2则返回小于0的数,如果晚于则返回大于0的数,否则返回0.

<?php

    $time1=date("Y-m-s H:i:s");

    $time2="2014-12-3 16:30:02";

    $res=strtotime($time1)-strtotime($time2);

    $days=ceil($res/(24*60*60));//计算两个时间相隔的天数

    $hours=ceil($res/3600);//计算两个时间相隔的小时数

    echo "相隔".$days."<p>";

    echo "相隔".$hours."小时<p>";

?>

 

  1. 计算程序运行时间

string microtime(void)

返回时间戳和微妙数,中间用空格隔开。

<?php

    function run_time()

    {

       list($msec,$sec)=explode(" ", microtime());

       return ((float)$msec+(float)$sec);

    }

    $start_time=run_time();

    for($index=1;$index<100;$index++){

       $sum=0;

       for($k=1;$k<1000;$k++){

           $sum=$sum+1;

       }

    }

    $end_time=run_time();

    echo "用时:".($end_time-$start_time)."";

?>

 

13、COOKIE

  1. 创建Cookie

setcookie(name,value,expire,path,domain,secure)

参数

描述

name

必需。规定 cookie 的名称。

value

必需。规定 cookie 的值。

expire

可选。规定 cookie 的有效期。

path

可选。规定 cookie 的服务器路径。

domain

可选。规定 cookie 的域名。

secure

可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值. cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。cookie数据保存在文本文件中。

<?php

    setcookie("TMCookie","www.baidu.com");

    setcookie("TMCookie","www.baidu.com",time()+60);//设置有效时间为60

    $value = "my cookie value";

    setcookie("TMCookie",$value,time()+3600,"/tm/","www.baidu.com",1)

?>

注:如果未设置Cookie的失效时间,则在关闭浏览器时自动删除Cookie数据。

  1. 读取Cookie

<?php

    if(!isset($_COOKIE["visitTime"])){//检测Cookie文件是否存在

       setcookie("vistTime",date("Y-m-d H:i:s"));

       echo '欢迎第一次访问';

    }

    else{

       setcookie("vistTime",date("Y-m-d H:i:s"),time()+60);

       echo '上次访问时间'.$_COOKIE["vistTime"];

    }

?>

 

<?php

setcookie("cookie[three]","cookiethree");

setcookie("cookie[two]","cookietwo");

setcookie("cookie[one]","cookieone");

 

// 输出 cookie (在重载页面后)

if (isset($_COOKIE["cookie"]))

  {

  foreach ($_COOKIE["cookie"] as $name => $value)

    {

    echo "$name : $value <br />";

    }

  }

?>

 

  1. 删除Cookie

将setcookie函数第二个参数设置为空或者把失效时间设置为过去时间就可以删除cookie.

setcookie ("TestCookie", "", time() - 3600);

 

14、Session

Cookie是存储在客户端的硬盘上的,而Session是存储在服务器上的,在PHP脚本中以变量形式创建。

 

<?php

    session_set_cookie_params(2*60);//设置session失效时间为2分钟

    session_start();//启动Session

    $_SESSION["admin"]="fearless";//声明session变量并赋值

    if(!empty($_SESSION["admin"])){

       echo $_SESSION["admin"];

    }

    unset($_SESSION["admin"]);//注销会话

    if(!empty($_SESSION["admin"])){

       echo $_SESSION["admin"];

    }

    else{

       echo '会话不存在';

    }

?>

如果要删除多个会话可以通过一个空数组赋给$_SESSION来实现。

$_SESSION=array();

如果整个会话已结束应该注销所有的会话变量,然后使用session_destroy()函数清楚会话。

注意:session_set_cookie_params必须在session_start之前调用。

 

通过setcookie设置session失效时间。

<?php

    session_start();

    $time=60*60;//失效时间为60分钟

    setcookie(session_name(),session_id(),time()+$time,"/");

    $_SESSION["user"]="wit";

?>

 

设置session存储路径,session_save_path必须在session_start之前调用。

<?php

    session_save_path("./tmp/");

    session_start();

    $_SESSION[username]=true;

?>

 

设置session缓存将网页中的内容暂时存储到客户端,提高网页访问速度。

<?php

    session_cache_limiter('private');//客气客户端缓存

    $limit=session_cache_limiter();

    session_cache_expire(30);

    $expire=session_cache_expire();

    session_start();

    echo $limit.'<p>';

    echo $expire;

?>

15、解析JSON

使用json_decode可以解析JSON格式内容。

【例1】

$json_string='{"id":1,"name":"jb51","email":"admin@jb51.net","interest":["wordpress","php"]} ';

$obj=json_decode($json_string);

echo $obj->name; //prints foo

echo $obj->interest[1]; //prints php

 

16、加密函数

  1. crypt()函数

string crypt ( string $str [, string $salt ] )

返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。此函数加密不可逆。

<?php

 if ( CRYPT_STD_DES  ==  1 ) {

    echo  'Standard DES: '  .  crypt ( 'rasmuslerdorf' 'rl' ) .  "\n" ;

}

 

if ( CRYPT_EXT_DES  ==  1 ) {

    echo  'Extended DES: '  .  crypt ( 'rasmuslerdorf' '_J9..rasm' ) .  "\n" ;

}

 

if ( CRYPT_MD5  ==  1 ) {

    echo  'MD5:          '  .  crypt ( 'rasmuslerdorf' '$1$rasmusle$' ) .  "\n" ;

}

 

if ( CRYPT_BLOWFISH  ==  1 ) {

    echo  'Blowfish:     '  .  crypt ( 'rasmuslerdorf' '$2a$07$usesomesillystringforsalt$' ) .  "\n" ;

}

 

if ( CRYPT_SHA256  ==  1 ) {

    echo  'SHA-256:      '  .  crypt ( 'rasmuslerdorf' '$5$rounds=5000$usesomesillystringforsalt$' ) .  "\n" ;

}

 

if ( CRYPT_SHA512  ==  1 ) {

    echo  'SHA-512:      '  .  crypt ( 'rasmuslerdorf' '$6$rounds=5000$usesomesillystringforsalt$' ) .  "\n" ;

}

 ?>

输出结果:

 

  1. md5()函数

string md5 ( string $str [, bool $raw_output = false ] )

以 32 字符十六进制数字形式返回散列值。此函数加密不可逆。

<?php

$str  =  'apple' ;

echo md5($str);

 ?>

输出结果:

1f3870be274f6c49b3e31a0c6728957f

  1. sha1()函数

string sha1 ( string $str [, bool $raw_output = false ] )

如果可选的 raw_output 参数被设置为 TRUE ,那么 sha1 摘要将以 20 字符长度的原始格式返回,否则返回值是一个 40 字符长度的十六进制数字。sha1加密不可逆。

<?php

$str  =  'apple' ;

echo sha1($str);

 ?>

输出结果:

d0be2dc421be4fcd0172e5afceea3970e2f3d940

  • 20
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,关于Smarty模板引擎的学习笔记,我可以为您提供以下内容: 1. Smarty是什么? Smarty是一个用PHP编写的模板引擎,它将PHP代码与HTML代码分离,使得代码更易于维护和设计。Smarty使用一套模板标签来代替PHP代码,这些标签可以在模板中使用,以生成最终的HTML代码。 2. Smarty的优势 - 简单易用:Smarty的模板标签简单易懂,可以快速上手。 - 分离代码:Smarty将PHP代码与HTML代码分离,使得代码更易于维护和设计。 - 可扩展性:Smarty支持插件机制,可以方便地扩展和定制功能。 - 性能优化:Smarty支持缓存机制,可以提高页面加载速度。 3. Smarty的基本语法 Smarty的模板标签由大括号包围,例如:{tag}。以下是Smarty的一些基本标签: - 输出变量:{$variable} - 条件语句:{if $variable == 'value'}{/if} - 循环语句:{foreach $array as $key => $value}{/foreach} - 引入文件:{include file="filename.tpl"} 4. Smarty的高级功能 - 模板继承:Smarty支持模板继承,可以减少模板重复代码。 - 插件机制:Smarty支持插件机制,可以方便地扩展和定制功能。 - 缓存机制:Smarty支持缓存机制,可以提高页面加载速度。 - 自定义函数:Smarty支持自定义函数,可以方便地扩展其功能。 以上是我为您提供的Smarty模板引擎学习笔记,希望对您有所帮助。如果您有其他问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值