读书笔记《PHP与MySQL程序设计》一
第1章 PHP概述
1.1 历史(PHP4、PHP5、PHP5.3、PHP6[未发布])
1.2 一般语言特性(实用性、强大功能、可选择性、成本[开源])
第2章 环境配置
2.1 安装的前提条件(apache或IIS7)
2.2 在Linux上安装Apache和PHP
2.3 在Windows上安装Apache和PHP
2.4 在Windows上安装IIS和PHP
2.5 测试安装
2.6 配置PHP
2.7 运行时配置
2.8 选择代码编辑器
2.9 选择WEB托管服务商
第3章 PHP基础
3.1 在Web页面中嵌入PHP代码
3.2 为代码添加注释
<?php echo "hello world!" ?> //默认语法 <? echo "hello world!"?> #短标签 /* 这是一段多行注释*/
3.3 向浏览器输出数据
//print语句,如下两句输出结果相同 <?php print("<p>Hello PHP!</p>"); ?> <?php $str="PHP";print "<p>Hello $str!</p>"; ?>
//echo语句,几乎等同于print <?php $str1="A";$str2="B";echo $str1." and ".$str2; ?>
//printf语句,输出由静态和若干变量动态信息的混合 <?php printf ("<p>%d bottles of tonic water.</p>",100) ?> /* %b 整数,显示为二进制 %c 整数,显示为对应ASCII字符 %d 整数,显示为有符号十进制 %f 浮点数,显示为浮点数 %o 整数,显示为八进制 %s 字符串,显示为字符串 %u 整数,显示为无符号十进制 %x 整数,显示为小写十六进制 %X 整数,显示为大写十六进制 */
//sprintf语句,输与printf类似,但它将输出赋值给一个字符串 $cost=sprintf("$%.2f",43.2);//$cost=$43.20
3.4 PHP支持的数据类型
标量数据类型:布尔型、整型、浮点型(单精度[float]、双精度[double]、实数[real number])、字符串
复合数据类型:数组、对象
类型强制转换操作符
/* (array) 转为数组 (bool)或(boolean) 转为布尔值 (int)或(integer) 转为整数 (object) 转为对象 (float)或(double)或(real) 转为浮点数 (string) 转为字符串*/ $score=(int) 14.8; echo $score;//14 $str="this is str"; echo (int) $str;//0 $score=114; $scoreboard=(array) $score;echo $scoreboard[0];//114,数字被转换为数组的一个成员 $name="Gavin"; $obj=(object) $name; echo $obj->scalar;//Gavin,任何数据都可转为对象,并默认成为对象的scalar属性
类型自动转换
$num=5;$str="15px";echo $num+=$str;//20,字符串自动转整数 $str="1.0";if($str) echo "this is true";//this is true,字符串自动转布尔型 $val1="1.2e2";$val2=2; echo $val1*$val2;//240,字符串转整数
与类型有关的函数:gettype(获取类型)、settype(转换类型)
$val1="1.2e2";echo gettype($val1);//string //共有8个可能的返回值:array、boolean、double、integer、object、resource[资源]、string和unknown type
$val1="15px";echo settype($val1,"integer")."+".$val1;//1+15 //转换成功返回true,可以指定的7种类型:array、boolean、float、integer、null、object、string
类型判断函数
//is_array,is_bool,is_float,is_integer,is_null,is_numeric,is_object,is_resource,is_scalar,is_string $num=43;printf("\$num is of type integer:%d<br/>",is_integer($num));//43 is of type integer:1
3.5 标识符(即自定义名称,区分大小写)
3.6 变量
变量声明:以美元符$开头,遵循标识符的命名规范,不需要显示的声明
$val1="red";//按值赋值 $val2=& $val1;//引用赋值,$val2和$val1都等于“red”
变量的作用域:局部变量、函数参数、全局变量、静态变量(变量名前加关键字STATIC,函数退出不会销毁,再次调用函数可使用缓存)
PHP的超级全局变量:$_SERVER、$_GET、$_POST、$_COOKIE、$_FILES、$_ENV、$_SESSION
变量的变量
$str="A";$A="B";echo $$str;//B,$$str相当于$A
3.7 常量(一旦定义无法修改,使用define()函数定义)
define("PI",3.1415926);printf("<p>The value of PI is %f</p>",PI)
3.8 表达式
操作数(通常指变量)
操作符:操作符的优先级和结合性,操作符种类(算术、赋值、字符串、自增自减、逻辑、相等、比较、位)
$a="abc"."def";//abcdef,字符串拼接看,这里.相当于JS中的+ $a.="ghi";//abcdefghi,拼接赋值,这里.=相当于JS中的+=
3.9 字符串插入
双引号(包裹字符串)
转义序列
单引号(与双引号不同,解析时变量和转义序列不会被解释)
大括号(常用于嵌入复杂数据类型,如{$arr['name']})
heredoc(用于输出大量文本)
Nowdoc(php5.3新特性,等同于heredoc)
$a="abc";echo "$a is good \n";//abc is good,双引号解析 $a="abc";echo '$a is good \n';//$a is good \n,单引号不解析
3.10 控制结构
条件语句:if、else、elseif、switch
循环语句:while、do...while、for、foreach、break和goto和continue
文件包含语句:include、include_once、require(与include的区别是在if为假,依然请求指定文件到当前位置)、require_once
第4章 函数
4.1 调用函数
4.2 创建函数
function fun1($a){$a+=1;};$num=1;fun1($num);echo $num;//1,按值传递参数,函数内修改变量的值,不影响其函数外的值 function fun2(&$a){$a+=1;};$num=1;fun2($num);echo $num;//2,按引用传递参数,函数内修改变量的值,函数外同步修改
function fun($a,$b=2){echo $a*$b};$num=5;fun($num);//10,$b为参数默认值
function fun(){return array("red","blue","green");};list($r,$b,$g)=fun();echo "$r,$b,$g"; //return函数返回值,需要返回多个值时使用数组,list()函数给一组变量赋值
function fun($a){if($a>0){return $a+fun($a-1);}};echo fun(5);//15,递归函数
4.3 函数库
第5章 数组
5.1 什么是数组
5.2 创建数组
$arr1[0]="one";$arr1[1]="two";//直接建立引用即可 $arr2[]=1,$arr2[]=2;//若索引值是数值且递增,创建时可省略索引值 $arr3["name"]="gavin",$arr3["age"]=30;//创建关联数组,不过必须一直使用键 $arr4=array("one","two");//使用array()创建索引数组 $arr5=array("name"=>"gavin","age"=>30);//使用array()创建关联数组
$arr=array("one","two");list($a,$b)=$arr;echo "$a + $b";//one + two,list函数提取数组 $die=range(1,5);//range函数预定义值来填充数组,类似$die=array(1,2,3,4,5) $state=array(1,2);printf("\$state is array:%s",(is_array($state)?"true":"false"));//is_array函数测试数组
5.3 输出数组
$arr=array("one","two");foreach($arr AS $a){echo "{$a}\n";};//使用foreach遍历输出,多维数组可考虑vprintf函数 print_r($arr);//Array ( [0] => one [1] => two ),打印数组用于测试
5.4 添加和删除数组元素
$arr=array("two"); array_unshift($arr,"zero","one");print_r($arr);//在数组头添加一个或多个 array_push($arr,"three","four");print_r($arr); //在数组尾添加一个或多个 echo array_shift($arr)."\n";print_r($arr); //在数组头删除,返回删除值,每次删除一个 echo array_pop($arr)."\n";print_r($arr); //在数组尾删除,返回删除值,每次删除一个
5.5 定位数组元素
$a="one";$arr=array("one","two");if(in_array($a,$arr)){echo '$a in $arr'}//搜索数组,返回布尔值 $arr["one"]=1;if(array_key_exists("one",$arr)){echo 'one in $arr';}//搜索关联数组键,返回布尔值 $key=array_search(1,$arr);if($key){echo "$key : $arr[$key]";}//搜索关联数组值,如果找到返回相应键,否则false
$arr=array("name"=>"gavin","age"=>30); print_r(array_keys($arr));//Array ( [0] => name [1] => age ),获取数组的键组 print_r(array_values($arr));//Array ( [0] => gavin [1] => 30 ),获取数组的值组
5.6 遍历数组
$arr=array("name"=>"gavin","age"=>30); while(key($arr)){echo key($arr)."\n";next($arr);}//name age,遍历数组键 reset($arr);//重置指针到数组首位,(next)下一位、(prev)上一位,(end)末尾位 while(current($arr)){echo current($arr)."\n";next($arr);}//gavin 30,遍历数组值
5.7 确定数组的大小和唯一性
$arr=array("a","b");echo count($arr);//2,count确定数组大小,与sizeof相同 $arr1=array("a","b","c","a");print_r(array_count_values($arr1));//统计数组元素出现的频次 //Array ( [a] => 2 [b] => 1 [c] => 1 ) print_r(array_unique($arr1));//删除重复项
5.8 数组排序
$arr=array("one","two","three"); print_r(array_reverse($arr));//数组倒序,Array ( [0] => three [1] => two [2] => one ) print_r(array_flip($arr));//数组键和值对换,Array ( [one] => 0 [two] => 1 [three] => 2 ) sort($arr);print_r($arr);//数组排序,破坏键值关联,Array ( [0] => one [1] => three [2] => two ) $arr=array("one","two","three");//重置 asort($arr);print_r($arr)//同sort,保持键值关联,Array ( [0] => one [2] => three [1] => two ) rsort(array);//与sort相同,排序相反 arsort(array);//与asort相同,排序相反 natsort(array);//自然排序 natcasesort(array);//不区分大小写的自然排序 ksort(array);//按键值对数组排序 krsort(array);//与ksort相同,排序相反 usort(array,callback);//根据自定义规则排序
5.9 合并、拆分、接合和分解数组
array_merge(array1,array2);//合并两个或多个数组 array_merge_recursive(array1,array2);//与array_merge相同,仅关联数组出现相同键时,前置是替换,它是将值合并为数组 array_combine(keys,values);//将键数组和值数组,组合为新的关联数组,两者大小要相同且不为空 array_slice(array,[offset,[length]]);//拆分数组 array_splice(array,[offset,[length]]);//接合数组 array_intersect();//求数组的交集 array_intersect_assoc();//求关联数组的交集 array_diff();//求数组的差集 array_diff_assoc();//求关联数组的差集
5.10 其他有用的数组函数
array_rand(array[,num]);//返回一组随机的键 shuffle();//随机洗牌数组元素 array_sum();//对数组中的值求和 array_chunk();//划分数组
第6章 面向对象的PHP
6.1 OOP的好处(封装、继承、多态)
6.2 关键的OOP概念(类、对象、属性)