一、PHP概念与原理
1、PHP概念
PHP是Hypertext Preprocessor(超文本预处理器)的字母缩写,是一种广泛使用的服务器端编程语言,用于开发动态网页。PHP是一种开源的、跨平台的、独立于架构的、解释的、面向对象的、快速的、健壮的、安全性高的Web编程语言。
2、PHP原理
二、PHP语法
PHP脚本以<?php 开始 ,以?>结束。
<?php
//PHP代码
?>
PHP 文件的默认文件扩展名是 “.php”。
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
三、PHP变量
实例:
<?php
$x=1;
$y=2;
$z=$x+$y;
echo "$z";
?>
1、PHP变量规则:
1)变量以 $ 符号开始,后面跟着变量的名称;
2)变量名必须以字母或者下划线字符开始;
3)变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ );
4)变量名不能包含空格;
5)变量名是区分大小写的($y 和 $Y 是两个不同的变量);
2、PHP 是一门弱类型语言
即不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
3、PHP变量作用域
PHP有四种不同的变量作用域:
1)local
2)global
3)static
4)parameter
4、变量的参考指定
要使变量$x在值跟着变量$y的值发生改变,加上一个&
$y=1;
$x=&$y;
5、可变变量
$x="hello";
$$x="world";
echo "$x $hello"
//上述代码实际定义了两个变量,变量$x的值为”hello“,变量$hello的值为”world“;变量$hello就等于$$x
//要保证输出的正确性,必须用大括号将原先的变量包含起来
echo "$x ${$x}";
局部和全局作用域
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
$x=5; //全局变量
function Test()
{
$y=2;
echo "$x"; //无法输出
echo "$y"; //局部变量
}
Test();
echo "$x";
echo "$y"; //无法输出
?>
</body>
</html>
当我们调用est()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。
<?php
$x=5; //全局变量
function Test()
{
global $x; //使用global关键字
$y=2;
echo "$x"; //可以输出了。
echo "$y"; //局部变量
}
Test();
?>
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php
$x=5; //全局变量
$y=4;
function Test()
{
$GLOBALS['x']=$GLOBALS['x']+$GLOBALS['y'];
}
Test();
echo "$x";
?>
四、PHP的数据类型
布尔型、整型、浮点型、字符串型、数组、对象、资源型、NULL。
1、布尔数据类型
布尔数据类型只有TRUE与FALSE两个值,且不区分大小写,即可以写成true与false,或是True与False。
若要将其他的数据类型转换成布尔数据类型,需要在前面加上(bool)或是(boolean)
例如:
$a=100;
$b=0;
echo "a=".(bool)$a.",b=".(boolean)$b; //输出a=1,b=
用户可用gettype()函数来返回数据类型的种类。
如果要将其他数据类型转换为布尔数据类型,以下被认为是布尔值false:
(1)整数0,浮点数0.0;
(2)空字符串以及字符串“0”;
(3)没有元素的数组;
(4)没有成员变量的对象;
(5)特殊的数据类型NULL(包括未设置的变量);
(6)出来0以外的数字都认为是布尔值true,包括负数。
2、整数数据类型
整数可以使用十进制、八进制、十六进制来表示,在Windows操作系统中,有效范围是-2147483648~2147483647.
如果要显示的数字超出了整数数据类型的有效范围,PHP会使用浮点数进行表示。
例如:
$x=2147483647;
echo gettype($x); //没有超过范围,输出integer
$y=2147483648;
echo gettype($y); //超出了范围,输出double
如果要将其他数据类型转换成整数数据类型,在前面加上(int)或是(integer)
不要将未知的小数使用(int)或(integer)强制转换成整数数据类型进行计算,因为得到的结果是无法预测的。
例如:
echo (int)((0.1+0.7)*10) //浏览器输出为7,而不是正确的8!!
3、浮点数数据类型
(1)可以使用round()函数来将浮点数四舍五入,转换成指定小数点精度的整数或浮点数。
例如:
echo round(3.4); //输出 3
echo round(3.5); //输出 4
echo round(3.6,0); //输出 4;保留0位小数,对第一位小数四舍五入
echo round(1.95583,2); // 输出1.96 ;保留2位小数,对第三位小数四舍五入
echo round(1241757,-3); //输出1242000 ;从整数的右边开始,对第三位整数四舍五入
(2)可以使用ceil()函数来将浮点数无条件进位,转换成整数,但ceil()函数返回的值仍是浮点数数据类型。
例如:
echo ceil(4.3); //返回浮点数5
(3)可以使用floor()函数来将浮点数无条件舍去,转换成整数,但floor()函数返回的值仍是浮点数数据类型。
例如:
echo floor(4.3); //返回浮点数4
注意:不管是使用round、ceil、floor还是(int)来转换浮点数,未知小数在计算中因精度转换的关系,会产生无法预期的结果。
例如:
floor(((0.1+0.7)*10)) //浏览器的输出为7,而不是正确的8!
4、字符串数据类型
字符串可以使用单引号或者双引号包起来;但是有嵌套时:外层为单引号,内层为双引号。
(1)PHP的字符串只能表示256个字符,所以它不支持Unicode 。
(2)可使用以下方式取出字符串中的某个字符;
$str="hello";
echo $str{0}; //输出h
echo $str{4}; //输出o
(3)可使用strlen()函数取得字符串的长度;
(4)在将字符串与数字相加时,结果会得到数字,字符串会被转换成字符串开头能够转换的数字;
例如:
$x=2+"12.5"; //$x是浮点数(14.5)
$x=1+"mynumber "; //$x是整数(1)
$x=1+"10book"; //$x是整数(11)
(5)可使用ord()函数取得字符的ASCII码;
$str="\n";
echo ord($str); //输出10
(6)可使用chr()函数将ASCII码转换成字符;
echo chr(65); //输出A
(7)如果要将其他数据类型转换成整数数据类型,在前面加上(String)
布尔值true将转换成字符串"1" ,布尔值false将转换成空字符串"" 。
5、数组数据类型
特别之处:可以使用字符串作为数组下标;也可以指定数组下标。
<?php
$arr["first"]="a"; //字符串做下标
$arr["second"]="b";
echo $arr["first"];
$arr2=array(2 => "aa","bb"); //指定下标
echo $arr2[2]; //输出aa
?>
6、资源数据类型
PHP从4.0版开始新增加了资源(resource)数据类型,这种变量用来参考到外部的资源。例如:取得XML剖析器、MySQL数据库以及外部文件等。
7、NULL数据类型
NULL数据类型的值只能是NULL,这意味着变量的值就是NULL,没有其他的值。
其他的与其他语言类似。
五、PHP常量
使用define()函数设置常量
define(“常量名”,“常量值”,case_insensitive )
case_insensitive:可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
<?php
define("PI","3.1415926");
echo PI;
define("PI","3.1415926",true); //大小写不敏感
echo pi;
?>
六、PHP的内置数组和函数
PHP提供了一套附加的内置数组,也叫预定义数组,它们是一类特殊的数组,在全局范围内自动生效,在程序中直接使用,儿无须事先定义和初始化。这些数组变量包含了来自Web服务器,运行环境和用户输入的数据。
1、$GLOBALS : 包含一个引用指向每个当前脚本的全局范围内有效的变量,该数组的键名为全局变量的名称;
2、$_SERVER : 由Web服务器设定或者直接与当前脚本的执行环境相关联,是一个包含诸如头信息、路径和脚本位置的数组,该数组的实体由Web服务器创建;
3、$_GET : 经由URL请求提交至脚本的变量,是通过HTTP GET方法传递的变量组成的数组;
4、$_POST : 经由HTTP POST方法请求提交至脚本的变量,是通过HTTP GET方法传递的变量组成的数组;
5、$_COOKIE : 经由HTTP Cookies方法提交至脚本的变量,是通过HTTP Cookies传递的变量组成的数组,也用于读取Cookies值;
6、$_REQUEST : 经由GET、POST、COOKIES机制提交至脚本的变量。包括GET、POST、COOKIES的所以数据;
7、$_FILES : 经由HTTP POST文件上传而提交至脚本的变量,是通过HTTP POST 方法传递的已上传文件项目组成的数组,可用于PHP文件上传编程;
8、$_SESSION: 是当前注册给脚本会话的变量,是包含当前脚本中会话变量的数组,也用于访问会话变量;
1、接收表单数据和URL附加数据
PHP 中的 $_GET 和 $_POST 变量用于检索表单中的信息,比如用户输入。t通过name属性值:即$_POST[name属性值]。
实例:
这里有一个静态网页
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form action="/test2.php" method="post">
姓名:<input type="text" name="name"/>
<br />
兴趣:<input type="text" name="hobby"/>
<br />
性别:
<input type="radio" name="sex" value="男"/>男
<input type="radio" name="sex" value="女"/>女
<br />
血型:
<input type="radio" name="xuexing" value="A"/>A
<input type="radio" name="xuexing" value="B"/>B
<input type="radio" name="xuexing" value="AB"/>AB
<input type="radio" name="xuexing" value="O"/>O
<br />
<input type="submit" />
<input type="reset" />
</form>
</body>
</html>
则在PHP动态网页接收用户输入时:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
echo "你的名字:$_POST[name]";
echo "<br />";
echo "兴趣: $_POST[hobby]";
echo "<br />";
echo "性别:$_POST[sex]";
echo "<br />";
echo "血型:$_POST[xuexing]";
?>
</body>
</html>
2、字符串处理函数
去除空格函数
(1)trim()函数:该函数用于去除字符串开始位置和结束位置的空格字符
语法:trim(string str [,string charlist])
其中,参数str表示待处理的字符串;charlist为可选参数,指定要去除的字符,如果不指定该参数,则该函数将去除空格、制表符、空字节、换行符和回车符;
(2)ltrim()函数:该函数用于去除字符串左边的空格或其他指定的字符,并返回处理后的字符串;
语法:ltrim(string str [,string charlist])
其中参数的含义及功能和trim()函数完全一致;
(3)rtrim()函数:该函数用于去除字符串右边的空格或其他指定的字符,并返回处理后的字符串;
语法:rtrim(string str [,string charlist])
其中参数的含义及功能和trim()函数完全一致;
3、HTML处理相关函数
(1)nl2br()函数:当HTML文件中存在”\n“时,程序运行后不能显示换行效果,此时可以使用nl2br()函数将字符串中的换行符”\n“替换为HTML中的”<br>“标记;
例如:
$str="Welcome to \n Chengdu";
echo $str; // 直接输出不会有换行符
echo nl2br($str); // ”Welcome to “后面换行
(2)htmlspecialchars()函数:该函数可以将字符转化为HTML的实体形式;
htmlspecialchars()函数将特殊的HTML标签转化为HTML实体并以普通文本显示出来,可以用来防止恶意脚本对网站的工具;
可以转换为HTML实体形式的特殊字符:
原字符 | 转换后的字符 |
---|---|
& | & |
" | " |
’ | ' |
< | < |
> | > |
(3)htmlentities()函数:该函数把字符串的一些HTML标签转化为HTML实体并返回经过处理的字符串。与htmlspecialchars()函数类似,htmlentities()函数也可以将特殊字符转化为实体。它们的区别是:htmlspecialchars()函数只能转换&、",’ ,< 和 >这5个字符,二htmlentities()函数可以把汉字也一起进行转换;
例如:
$str="<font size=5>xxxxx</font>"
echo htmlentities($str); //输出<font size=5>xxxxx</font>
4、改变字符串大小写
使用strtolower()函数可以将字符串全部转化为小写;使用strtoupper()函数可以将字符串全部转化为大写;
5、字符串拆分与连接
(1)explode()函数:可以用指定的字符串分割另一个字符串,并返回一个数组;
语法:explode(string $separator, string $str [, int $limit])
其中:字符串 $separator是分割字符串 $str的边界点,参数 $limit是可选参数,如指定了此参数,则返回的数组中包含最多 $limit个元素,并且最后那个元素将包含str的剩余部分;
例如:
$str=" 使用 空格 分割";
$array=explode(" ", $str);
print_r($array); //输出array([0]=>使用 [1]=>空格 [2]=>分割)
(2)str_split()函数:与explode()函数不同的是,str_split()函数不以某个字符串为分割依据,而是以一定长度为单位将字符串分割成多段,并返回由各段组成的数组;
语法:str_split(string $str ,[,int $len])
其中, $str为要分割的字符串,可选参数 $len是分割的单位长度(默认的单位长度是1)
(3)implode()函数:与explode()函数和str_split()函数相反,使用implode()函数可以将存储在数组中的不同元素中的字符串连接成一个字符串;
语法:implode( string $glue , array $arr)
其中, $arr为保存连接字符串的数组, $glue是用于连接字符串的连接符;
例如:
$arr=array("welcome","to","China");
$str=implode(",",$arr); //使用逗号作为连接符
echo $str; //输出“welcome to China”
6、字符串查找
(1)substr()函数
语法:substr(string str,int start [, int length])
其中,
参数str是被操作的字符串;
参数start用来指定子串的起始位置,如默认,表示从第一个字符开始如果该参数为负数,则从原字符串末尾向前数start个字符,并由此开始取子串,如果start所指定的位置超过了str范围,则该函数返回false;
参数length用来指定子串的长度,如默认此参数或者该参数大于原操作字符串的长度,则返回从起始位置之后的所以字符。
(2)stristr()函数
该函数用来在一个字符串中查找一个子串的首次出现,在查找时会区分字符的大小写。
语法:stristr(string $str ,string $needle)
其中,参数 $str指定原字符串;参数 $needle表示要查找的子字符串,如果它不是一个字符串,则将转换为一个整数并作为一个普通字符来使用。
如果在字符串 $str中出现了 $needle,则返回 $str字符串从 $needle第一次出现的位置到 $str字符串结束处的字符串。如果没有返回值,即没有发现 $needle,则返回false。
(3)strstr()函数
strstr()函数的功能与stristr()函数基本相同,只不过在查找子串时不区分大小写。
7、字符串替换
(1)str_replace()函数
语法:str_replace(mixed $search , mixed $replace , mixed $str [, int & $count])
str_replace()函数的功能是使用新的字符串 $replace 替换字符串 $str中的 $search字符串。 $count是可选参数,是PHP5中新添加的,表示要执行的替换操作的次数。
该函数中 $search, $replace , $str以及函数本身的返回值都是mixed类型,也就是说这些参数可以是多种类型,相应的返回值也是多种类型,如字符串、数组等;
例如:
$str="I love you";
$replace="China";
$end=str_replace("you",$replace,$str);
echo $end; //输出"I love China"
str_replace()函数对大小写敏感,支持多对一替换(即可以将多个不同的字符替换成同一个字符)和多对多替换(即可以将多个不同的字符替换为多个对应的不同字符),但无法实现一对多的替换。
例如:
$str="My name is John Smith";
$array=array("a","o","A","O","e");
echo str_replac($array,"",str); //多对一替换,输出"My nm is Jhn Smith"
$array1=array("a","b","c");
$array2=array("d","e","f");
echo str_replace($array1,$array2,"abcdef"); //多对多替换,输出“defdef”
(2)str_ireplace()函数
该函数功能与str_replace()函数功能基本相同,只是不区分大小写。
(3)substr_replace()函数
该函数用于替换子串的文本内容并返回替换后的字符串。
语法:substr_replace(mixed str , string replacement , int start [, int length])
其中,参数str表示原字符串;参数replacement为指定用来替换原子字符串的新字符串;start用来指定执行替换操作起始位置。length是可选参数,表示要替换的长度,如果不给定,则从start位置开始一直到字符串结束;如果length为0,则替换字符串会插入到原字符串中;如果length为正值,则表示要用替换字符串替换掉的字符串长度;如果length为负值,表示从字符串末尾开始到length个字符为止停止替换。
例如:
echo substr_replace("abcdefg","YES",3); //输出"abcYES"
echo substr_replace("abcdefg","YES",3,3); //输出"abcYESg"
echo substr_replace("abcdefg","YES",-2,2); //输出"abcdeYES"
echo substr_replace("abcdefg","YES",3,-2); //输出"abcYESfg"
echo substr_replace("abcdefg","YES",2,0); //输出"abYEScdefg"
8、字符串加密
PHP中,crypt() ,md5()等函数可以实现字符串的加密。
crypt()函数
语法:crypt(string $str [ , string $salt])
其中,参数 $str是需要加密的字符串;参数 $salt是一个位字串,能够影响加密的暗码,干扰非法人员识别明文,从而减少被破解的可能性。默认情况下,PHP使用一个2字符的DES干扰串。
例如:
$str="这是明文";
$des="ab;
echo crypt($str,$des);
crypt()函数只能完成单向的加密功能,也就是所它可以加密一些明码,但不能将加密后的密文转换为原来的明码。因此使用crypt()不是特别安全。若要获得更高的安全性,可使用md5()函数,该函数使用散列算法对指定的字符串进行加密。
语法:md5(string str [, bool raw_output])
其中,参数str是需要加密的字符串;参数 raw_output是可选参数,如果为true,则md5()函数返回一个长度为16位的二进制格式的摘要,如果为false,则返回长度为32位的十六进制格式的摘要,该参数默认为false。
例如:
$str="我是明文";
echo md5($str);
下面还有时间日期函数、目录与文件的操作、PHP与数据库MySql的操作。。。啊,不想写了