读书笔记《PHP与MySQL程序设计》一

时间:2024-01-11 18:57:26

第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;//
$str="this is str"; echo (int) $str;//
$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概念(类、对象、属性)