PHP从入门到精通.docx
PHP从入门到精通1.分界标示符 PHP分界标示符确定PHP脚本的开始和结束位置,在PHP语言中有四种不同风格的分界标示符可以让PHP代码嵌入到HTML代码中,分别如下: a.PHP标准分界符:<?php 和 ?> b.PHP简写分界符:<? 和 ?> c.JavaScripte 和VBScript风格分界符:<script language=php>和</script> d.ASP风格分界符: <% 和 %> 2.标示符:由字符,数字,下划线组成,首字母必须是字符或下划线 变量以$开头。 3.PHP是区分大小写的。 4.语句以分号结束 5.注释: /* */ / # 共上面三种 6.数据类型:integer,double,string,array,object(对象类型),Boolean,resource(资源),NULL 7.字符串的定义:用双引号或者单引号,但有区别 双引号里面的变量和转义字符都会被解析,而单引号里面的就都当做是字符串来处理。如果在双引号中要想不解析变量,就可以用加在前面。 <?php $str = "hello" print "nihao,are you $str = $str" print "<br/>" print 'nihao,are you $str = $str' ?> 8.数组初始化: 数组定义: $arr = array; $arr0='nihoa' $arr1=1; 正常数组初始化: 方式一: $arr_family=array('LinNa','Jhon','Peter'); 方式二: $arr_family = 'LinNa' $arr_family = 'Jhon' $arr_family = 'Peter' 哈希表形式数组初始化: 方式一: $arr_family'mother' = 'LinNa' $arr_family'father' = 'Jhon' $arr_family'mother' = 'Peter' 方式二: $arr_family=array('mother'=>'LinNa','father'=>'Jhon','son'=>'Peter'); 9.对象: 类: Class 类名 Public $属性名; Public function 函数名 $变量名; <?php class foo public $C_foo = 'This is a class' public function do_foo echo 'Doing foo' $newfoo = new foo; print $newfoo->C_foo; print "<br/>" $newfoo->do_foo; ?> 效果如下: 10.NULL 空,可以使null,也可以使NULL,不区分大小写 NULL表示没有值的变量。 11.数据类型转换 一般情况下,数据类型会自动转换,同时我们也可以进行强制类型转换,强制类型转换的方法是把数据类型用括号括起来放在要转换的数据类型前面即可。 (int)/(integer) 转换为整形值 (real),(double),(float)转换为双精度 (string)转换为字符串 (array)转换为数组 (object)转换为对象。 12.变量不需要定义就可以使用。 在函数外部定义的变量时全局变量,在函数内部定义或使用的变量是局部变量。 在函数内部不能访问函数外部的变量 要想访问,就必须在函数内部,复制一个全局变量,global 全局变量名,这样用的变量才是全局变量。 <?php $a =1; $b =2; function Sum $b=$a+$b; print "Internal $b is $b" Sum; print "<br>" print "Out $b is $b" ?> 效果如下: 从上面可以看到,函数里面是没法调用全局变量的,要想调用,需要申明。 <?php $a =1; $b =2; function Sum global $a; global $b; $b= $a+ $b; print "Internal $b is $b" Sum; print "<br>" print "Out $b is $b" ?> 效果如下: 我们看见,要想在函数里面调用全局变量,必须先用global来复制一遍这个变量,才能使用。 13.静态变量:用static修饰的变量 1.对于全局变量,只要定义了,就会以键值的形式存到$GLOBAL这个数组中,所以,如果我们想在函数中使用全局变量,也可以$GLOBAL$全局变量名的形式来引用。 $GLOBALS:包含指向当前程序中全局范围内有效的变量,它是一个数组,该数组的索引就是全局变量的名称。 2.PHP还可以获得外部来的变量,外部来的有四种类型: $_GET:通过HTTP的GET方法提交至脚本的表单变量。 $_POST:通过HTTP的POST方法提交至脚本的表单变量。 $_FILE:通过HTTP的POST文件上传提交至脚本的变量。 $_COOKIE:通过HTTP的Cookies方法提交至脚本的变量。 NewHtml.php程序如下: <!DOCTYPEHTMLPUBLIC"-/W3C/DTD HTML 4.01 Frameset/EN"> <html> <head> <metahttp-equiv="Content-Type"content="text/html; charset=GBK"> <title>Insert title here</title> </head> <body> <p>This page uses frames. The current browser you are using does not support frames.</p> <formaction="index.php"method="post"> User:<inputtype="text"name="name"><br> Password:<inputtype="password"name="password"><br> Sex:<selectname="sex"> <optionvalue="female">female</option> <optionvalue="male">male</option> </select> <inputtype="submit"value="Submit"> </form> </body> </html> index.php程序如下: <?php $name = $_POST'name' $password=$_POST'password' $sex=$_POST'sex' echo "name is $name" echo "<br>" echo "passowrd is $password" echo "<br>" echo "sex is $sex" ?> 效果如下: 其他方式也是一样的。 3.检测是否为那个数据类型: 在PHP中,可以通过以下函数对变量的类型做判断。 函数is_integer判断变量是否为整数。 函数is_string判断变量是否为字符串。 函数is_double判断变量是否为浮点数。 函数is_array判断一个变量是否为数组。 我们会发现有很多很多的检测,用到可以直接拿来用。 4.获得数据类型: 在PHP中,可以使用预定义函数gettype取得一个变量的类型,它接受一个变量作为参数,返回这个变量的类型。 <?php $a = 1; $b='nihao' $c = array; echo "$a is " . gettype($a); echo "<br>" echo "$b is " . gettype($b); echo "<br>" echo "$c is " . gettype($c); ?> 效果如下: 使用预定义函数settype设置一个变量的类型,该函数接受两个参数,第一个参数是变量名,第二个参数是要设置的变量的数据类型。 使用预定义函数isset判断一个变量是否已经定义,它接受一个变量作为参数值,返回值如果为TRUE,说明该变量定义过,否则,说明该变量没有被定义。 使用unset语句删除一个变量。从PHP4开始unset不再有返回值,因此,严格意义上讲,它并不是一个函数,而是一个PHP的语言结构。可以用unset一次删除多个PHP变量。 unset($a); 在PHP中通过define函数定义一个常量。合法的常量名只能以字母和下划线开始,后面可以跟着任意字母、数字或下划线。常量一旦定义就不能再修改或者取消定义。 5.如果是多选框,虽然名字相同,但可能选择好多个,怎么处理呢? 可以再命名名字的时候,加. 但是单选框不一样,因为单选框只有一个值,可以不需要加 <!DOCTYPEHTMLPUBLIC"-/W3C/DTD HTML 4.01 Frameset/EN"> <html> <head> <metahttp-equiv="Content-Type"content="text/html; charset=GBK"> <title>Insert title here</title> </head> <body> <p>This page uses frames. The current browser you are using does not support frames.</p> <formaction="index.php"method="post"> User:<inputtype="text"name="name"><br> Password:<inputtype="password"name="password"><br> Sex:<selectname="sex"> <optionvalue="female">female</option> <optionvalue="male">male</option> </select><br> Gender:<inputtype="radio"name="gender"value="male">male <inputtype="radio"name="gender"value="female">female<br> Hobby:<inputtype="checkbox"value="read"name="hobby"> read <inputtype="checkbox"value="basketball"name="hobby"> basketball <inputtype="checkbox"value="travel"name="hobby"> travel <inputtype="checkbox"value="sing"name="hobby"> sing<br> <inputtype="submit"value="Submit"> </form> </body> </html> index.php: <?php $name = $_POST'name' $password = $_POST'password' $gender = $_POST'gender' $hobby = $_POST'hobby' $like="" foreach ($hobby as $one) $like .="、".$one; echo "gender is $gender" echo "<br>" echo "like: is $like" ?> 效果如下: 6.使用print_r函数显示数组元素 有时,为了在程序中查看一个数组的结构,需要将数组结构显示到页面上。这可以通过PHP的print_r函数实现。 <?php $ms_office = array( 0=>'word', 3=>'excel', 'outlook', 'access'); print_r($ms_office); ?> 效果如下: <?php $ms_office = array( 'word', 'excel', 'outlook', 'access' ); print_r($ms_office); ?> 效果如下: 7.实现数组分割 使用函数array_chunk可以对一个数组进行分割,该函数语法如下所示。 array array_chunk(array $input_array, int $size, bool $preserve_key); 该函数接受3个参数,$input_array是将要分割的数组,$size表示原数组被分割后,每个数组中元素的个数,$preverse_key是可选参数,它为TRUE时,分割后的每个数组的索引使用原数组的索引名;它为FALSE时,分割后的每个数组的索引都将使用从0开始的整数索引。该函数的返回值是一个数组,这个数组的索引从0开始,该数组的每个元素仍然是一个数组,即原数组被分割后的一个数组。 <?php $ms_office = array( 'wd'=>'word', 'ec'=>'excel', 'ol'=>'outlook', 'ac'=>'access', 'vs'=>'visio' ); echo '<pre>'/作用就是让输出按格式来,不是直接乱七八糟输出 print_r(array_chunk($ms_office,2); print_r(array_chunk($ms_office,2,TRUE); ?> 效果如下: 8.实现数组合并 使用函数array_merge可以合并一个或多个数组,该函数的语法如下所示。 array array_merge($array); 该函数接受一个或多个数组作为参数,PHP5中,它只接受array类型的参数。该函数返回一个合并后的数组。 <?php $arr1 = array('Earth','Venus'); $arr2 = array(4=>'Mars',5=>'Jupiter',6=>'Saturn'); $planet = array_merge($arr1,$arr2); echo '<pre>' print_r($planet); ?> 效果如下: 9.处理数组元素和键值位置 PHP的每个数组内部均会有一个指针,指向当前元素。这里所谓的指针,可以把它理解成程序即将要处理的元素所在的位置。处理数组元素和键值的位置,就是获取数组某个位置上的元素,或获取该元素后,将该指针移动到其他位置。PHP中,处理数组元素和键值位置的函数主要有以下几个。 current:该函数返回数组的当前元素,不移动当前指针位置。 next:该函数返回当前元素的下一个元素的值,并将指针向后移动一位,下一个元素不存在时,返回FALSE。 prev:该函数返回当前元素的上一个元素的值,并将指针向前移动一位,上一个元素不存在时,返回FALSE。 end:该函数返回数组的最后一个元素的值。 <?php $planet = array( 'Earth', 'Venus', 'Mars', 'Jupiter', 'Saturn' ); $pos = current($planet); echo 'pos1='.$pos; echo '<br/>' echo '<br/>' $pos = next($planet); echo 'pos2='.$pos; echo '<br/>' echo '<br/>' $pos = current($planet); echo 'pos3='.$pos; echo '<br/>' echo '<br/>' $pos = prev($planet); echo 'pos4='.$pos; echo '<br/>' echo '<br/>' $pos = end($planet); echo 'pos5='.$pos; echo '<br/>' echo '<br/>' $pos = current($planet); echo 'pos6='.$pos; ?> 效果如下: /此时$pos=Earth /此时$pos=Venus /此时$pos=Venus /此时$pos=Earth /此时$pos=Saturn /此时$pos=Saturn 10.数组建新索引排序: 10.1使用函数sort对数组元素按顺向排序,即按字母由前向后或按数字由小到大排序。该函数的语法如下所示。 bool sort(array &$arr ,int $sort_flag); 该函数接受一个数组作为输入参数,如果处理成功,该函数返回TRUE,否则,该函数返回FALSE。该函数将会删除所要排序的数组原有的索引值,从而为该数组使用新的索引值。 10.2使用函数rsort对数组元素做逆向排序,即按字母从后到前或按数字由大到小排序。该函数的语法如下所示。 bool rsort(array &$arr ,int $sort_flag); 该函数接受一个数组作为输入参数,如果处理成功,函数返回TRUE,否则返回FALSE。该函数将会删除所要排序的数组原有的索引值,从而为该数组使用新的索引值。 11.数组保持原索引的排序: asort:该函数对数组元素进行排序,并且保持数组的原索引关系不变。该函数仍然对数组元素按顺向排序。如果处理成功,该函数返回TRUE,否则返回FALSE。 ksort:该函数对数组元素按索引名顺序排序,并且保持数组的原索引关系不变,如果处理成功该函数返回TRUE,否则返回FALSE。该函数主要用于关联数组。 <?php $planet1 = array( 'Earth', 'Venus', 'Mars', 'Jupiter', 'Saturn' ); $planet2 = array( 'X'=>'Earth', 'Y'=>'Venus', 'Z'=>'Mars', 'A'=>'Jupiter', 'B'=>'Saturn' ); asort($planet1); ksort($planet2); echo '使用函数asort对数组元素排序:' echo '<br/>' foreach($planet1 as $key => $value) echo 'planet1'.$key.'='.$value; echo '<br/>' echo '<br/>' echo '<br/>' echo '使用函数ksort对数组元素排序:' echo '<br/>' foreach($planet2 as $key => $value) echo 'planet2'.$key.'='.$value; echo '<br/>' echo '<br/>' ?> 效果如下: 12.数组的随机排序 PHP提供一个随机排序数组元素的函数shuffle,该函数的语法如下所示。 bool shuffle (array $array) 该函数为参数数组$array中的元素赋予新的键名,这将删除原有的键名而不仅仅是重新排序。如果执行成功该函数返回TRUE。 13.数组的反向排序 本节最后,介绍一个可以将数组元素按原顺序反向排序的函数,该函数是array_reverse。其语法如下所示。 array array_reverse (array $array , bool $preserve_keys) 该函数返回一个与原数组单元顺序相反的数组,原数组以参数$array传入该函数,该函数的第2个参数是可选的,如果第2个参数$preserve_keys设置为TRUE,则原数组的键名将会被保留。 14.重置一个数组 PHP中,重置一个数组指的是,将数组中的内部指针移动到该数组的第一个元素所在的单元。使用函数reset可以完成对数组的重置。该函数的语法如下所示。 mixed reset(array &$arr); 该函数接受一个数组类型的变量,将函数内部指针指向数组第一个单元,并将第一个单元的元素返回。如果数组为空,该函数返回FALSE。 <?php $planet = array( 'Earth', 'Venus', 'Mars', 'Jupiter', 'Saturn' ); echo '当前元素是:'.current($planet); echo '<br/>' next($planet); next($planet); echo '<br/>' echo '调用两次next函数之后,当前元素是:'.current($planet); echo '<br/>' reset($planet); echo '<br/>' echo 'reset数组$planet后,当前元素是:'.current($planet); echo '<br/>' ?> 效果如下: 15.用数组对变量赋值 PHP中,可以将数组的元素作为值赋给变量,使用语言结构list可以完成这个功能。严格意义上讲,list和array一样,不是函数。 在下述程序中,通过list,将数组$planet的第一个元素Earth赋给了变量$no1,将第二个元素赋给了变量$no2,将第3个元素赋给了变量$no3。 <?php $planet = array( 'Earth', 'Venus', 'Mars', 'Jupiter', 'Saturn' ); list($no1,$no2,$no3) = $planet; /将数组中的前3个元素分别赋给list结构中对应的3个变量 echo 'no1='.$no1; echo '<br/>' echo '<br/>' echo 'no2='.$no2; echo '<br/>' echo '<br/>' echo 'no3='.$no3; echo '<br/>' echo '<br/>' ?> 效果如下: 16.快速创建数组 函数range可以快速创建制定元素范围的数组。其语法如下所示。 array range(mixed $low, mixed $high , number $step) 函数range返回一个数组,其中元素为参数从$low到$high的序列,包括它们本身。例如range(1,9)相当于array(1,2,3,4,5,6,7,8,9),如果$low>$high,则序列将从$high到$low。该函数的第3个参数$step是可选的,如果给出了step的值,它将被作为元素之间的跨度值。step应该为正值。如果未指定,step则默认为1。 <?php echo '<pre>' $arr1 = range(5,10); print_r($arr1); $arr2 = range('a','f'); print_r($arr2); $arr3 = range(2,10,2); print_r($arr3); ?> 效果如下; 17.压入和弹出数组元素 这里所说的压入是指,向数组的末尾增加一个元素。而弹出是指,将数组中的最后一个元素取出。PHP提供两个函数分别完成这两个功能,这两个函数是array_push和array_poo。需要注意的是,使用本函数后会重置数组指针,相当于使用了函数reset。 18.改变数组字符索引名的大小写 PHP提供了一个函数,可以将以字符串作为数组索引的大小写全部更换,这个函数是array_change_key_case,该函数的语法如下所示。 array array_change_key_case(array $input , int $case) 函数array_change_key_case将参数$input数组中的所有索引改为全小写或大写。可选参数$case用来指定大小写转换方式,它为两个常量值:CASE_UPPER和CASE_LOWER。没有指定该参数时,该函数使用的默认值是CASE_LOWER。 <?php $olympic = array( 'Barcelona'=>1992, 'AtLanTa'=>1996, 'sydney'=>2000, 'AthEns'=>2004, 'BEIJING'=>2008 ); echo '原数组:' echo '<pre>' print_r($olympic); echo '</pre>' $nol = array_change_key_case($olympic, CASE_UPPER); echo '<br/>' echo '调用array_change_key_case之后:' echo '<pre>' print_r($nol); ?> 效果如下: 19.交换数组索引和元素 PHP中的数组可以通过函数实现索引和元素的交换,这对程序实现某些操作带来极大的便利,这个函数就是array_flip; <?php $olympic = array( 'Barcelona'=>1992, 'Atlanta'=>1996, 'Sydney'=>2000, 'Athens'=>2004, 'Beijing'=>2008 ); echo '原数组:' echo '<pre>' print_r($olympic); echo '</pre>' $nol = array_flip($olympic); echo '<br/>' echo '数组元素和索引对调之后:' echo '<pre>' print_r($nol); ?> 效果如下: 20.快速填充数组元素 PHP提供函数快速填充数组,将数组中的某些或所有元素都置成通一个值,这个函数是array_fill,其语法如下所示。 array array_fill(int $start, int $num, mixed $value) 函数array_fill有3个参数:其中参数$start指定要填充元素的开始索引,参数$num表示将$num个数组元素以参数$value填充。 <?php $arr = array_fill(2, 4, 'orange'); echo '<pre>' print_r($arr); ?> 效果如下: 21.统计数组元素出现次数 函数cout用来计算整个数组元素的个数,而函数array_count_values用来统计数组中各元素出现的次数,即数组中各元素的个数。函数array_count_values的语法如下所示。 array array_count_values(array $arr) 该函数返回一个数组,这个数组把参数数组$arr中的元素作为索引,元素出现的次数作为对应索引的值。 函数array_count_values统计出数组$arr中,各个元素出现的次数,而且从这个执行结果可以看出,函数array_count_values统计元素时,是区分元素大小写的,比如Say和say会分别被统计。 <?php $say = array( 'Say', 'you', 'say', 'me', 'Say', 'it', 'together' ); echo '原数组:' echo '<pre>' print_r($say); echo '</pre>' $say_tmp = array_count_values($say); echo '<br/>' echo '统计结果如下:' echo '<pre>' print_r($say_tmp); ?> 效果如下: 22.检查数组索引是否存在 PHP提供函数array_key_exists检查给定的索引是否存在于数组中,该函数语法如下所示。 bool array_key_exists(mixed $key, array $search) 该函数查找由参数$key指定的索引,是否存在于由参数$sarch指定的数组中,如果存在,该函数返回TRUE,否则或者出错时,该函数返回FALSE。参数$key可以是任何能作为数组索引的值。 23.取得数组中的所有索引 PHP提供函数array_keys用来获取数组中所有的索引名,该函数语法如下所示。 array array_keys(array $arr , mixed $search_value , bool $strict) 该函数会将参数数组$arr中,所有的索引名返回到一个数组中。参数search_value是可选的,如果指定该参数,则函数array_keys只返回该元素值对应的索引名,可选参数$strict用来进行全等比较。 <?php $arr1 = array( 0=>100, "gold"=>"money" ); $arr2 = array( 'Sunday', 'Saturday', 'Monday', 'Sunday', 'Sunday' ); echo '<pre>' echo '数组arr1的全部索引是:' print_r(array_keys($arr1); echo '数组arr2中元素”Sunday“全部索引是:' echo '<br/>' print_r(array_keys($arr2,'Sunday'); ?> 效果如下: 24.用回调函数处理数组 PHP支持回调函数操作给定数组的元素上,这也是PHP数组函数的强大功能之一。函数array_map就可以完成这样的工作,它将回调函数作用到给定数组的元素上。其语法如下所示。 array array_map(callback_func, array $arr1 , array .) 函数array_map返回一个数组,该数组包含了参数$arr1中的所有元素经过函数callback_func处理过之后的元素。callback接受参数的数目应该和传递给array_map函数的数组数目一致。 <?php function cube($n) $cb = $n*$n*$n; return $cb; $a = array(1, 2, 3, 4, 5); $b = array_map("cube", $a); echo '计算原数组各元素的立方,结果如下:' echo '<br/>' echo '<pre>' print_r($b); ?> 效果如下: 25.in_array:该函数可以判断某个值是否存在于数组中。如果在数组中找到该值,函数返回TRUE,否则返回FALSE。 key:该函数可以获取数组中当前单元的索引值。 <?php $planet = array( 'Earth', 'Venus', 'Mars', 'Jupiter', 'Saturn' ); $temp = 'mars' if(in_array('Mars',$planet) echo 'Mars 存在于数组$planet中' echo '<br/>' echo '<br/>' if(in_array($temp,$planet) echo $temp.'存在于数组$planet中' echo '<br/>' echo '<br/>' else echo $temp.'不存在于数组$planet中' echo '<br/>' echo '<br/>' ?> 效果如下: <?php $planet = array( 'Eth'=>'Earth', 'Vns'=>'Venus', 'Mrs'=>'Mars', 'Jpt'=>'Jupiter', 'Stn'=>'Saturn' ); end($planet); echo '当前元素的索引为:'.key($planet); echo '<br/>' echo '<br/>' echo '当前元素的值为:'.end($planet); ?> 效果如下: 14.获取HTML的变量 HTML中的设计: <!DOCTYPEhtmlPUBLIC"-/W3C/DTD HTML 4.01 Transitional/EN""http:/www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <formaction="index.php"method="post"> name:<inputtype="text"name="Username"><br> sex:<inputtype="text"name="Usersex"><br> Email:<inputtype="text"name="UserEmail"><br> <inputtype="submit"value="Submit"> </form> </body> </html> Index.php文件: <?php $user =$_POST'User' echo "name: $username<br>n" echo "name: $usersex<br>n" echo "name: $userEmail<br>n" ?> 效果: 15.运算符:+ - * / % 16.连接字符串:用 . 把两个字符串连接起来,如果两个字符串中有一个数字,将自动转换为字符串,但数字两边要加空格,如果两个都是数字,如果不加空格,就会当做小数点来处理,如果当空格,就会当连接字符串处理。 echo "gege". 3 . 1 . "nihao". 3.1; ?> 效果如下: 17.赋值运算: %=将左边的值对右边取余数 .=将右边的字符串加到左边 18.关系运算符: =