第二部分 PHP篇
第3章 PHP基础
3.1 PHP的工作原理3.2 PHP的版本变迁3.3 PHP特性 完全免费开源,升级快,很多成熟的框架支持 支持模块化开发,实现程序逻辑与用户界面的完全分类 便捷性,开发快,硬性快,易学习 良好的跨平台性 同目前主流技术兼容 简单的语言 支持所有主流与非主流数据库 面向对象 编辑简单,实用性强3.4 PHP应用范围3.5 PHP基本语法 标记 <?php ...?> <? ...?> <% ...%> <script laguage="php">...</script> 注释 // 注释内容 # C++风格单行注释 # 注释内容 # Shell风格单行注释 / * * 注释内容 * /3.6 PHP中的变量与常量 变量 声明 $a 赋值 $a=1; 可变变量 B赋值给A,可通过B得到A变量的值 变量作用域 局部变量 函数参数 全局变量 GLOBAL 静态变量 static 超级全局变量:预定义变量 $GLOBALS $_SERVER $_GET|$_POST $_SESSION|$_COOKIE $_REQUEST 常量:在程序执行中无法修改的值 自定义常量 查看常量是否被定义 boolean define(starting name,mixed value[,bool case_insensitive]) # 定义常量不用$开头 魔术常量 根据位置而改变的常量 __LINE__ __FILE__ __FUNCTION__ __CLASS__ __METHOD__3.7 表达式 分类 单目表达式:$a 双目表达式:$a+$b 三目表达式:$a?$b:$c 操作符(从上到下优先级降低) 非结合 new # new 从左向有 [ # array 非结合 ++ -- # 递增递减 非结合 !·-(int)(float)(string)(array)(object) # 类型 从左到右 * / % #算数运算符 从左到右 +-. #算数运算符和字符运算符 从左到右 << >> #位运算符 非结合 < <= > >= #比较运算符 非结合 == != === !== #比较运算符 从左到右 & #位运算符和引用 从左到右 ^ #位运算符 从左到右 | #位运算符 从左到右 && #逻辑运算符 从左到右 || #逻辑运算符 从左到右 ?: #三元运算符 从右到左 = += -= *= /= %= |= &= ^= <<= >>= #赋值运算符 从左到右 And #逻辑运算符 从左到右 Xor& #逻辑运算符 从左到右 Or #逻辑运算符3.8 PHP中的数据类型 基本数据类型:整型、浮点型、布尔型、字符串 复合数据类型:数组、对象 特殊数据类型:null和资源3.9 强制类型转换 显式和隐式强制转换 隐式:PHP语言引擎自动解析的转换方式。如一个字符串和一个整型相加,会将字符串转换成整型 显式:(int)|(float)|(string)|(bool)|(array)|(object) 有用的强制类型转换函数 is_type()/gettype/settype3.10 PHP语句 顺序结构|分支结构|循环结构 循环语句 while语句 while(){}
do while语句 do{}while()
for(;;){}
条件判断语句 if(){}elseif(){}else{} switch($temp){case 'value':执行;break;...;default:执行}第4章 字符串和正则表达式4.1 什么是字符串4.2 定义字符串 '' "" 标识符(定界符)4.3 获取字符串 substr($string,$start[,$length])4.4 拼接字符串 . .=4.5 字符串格式化 printf($format[,$arg1][,$arg2]) sprintf($format[,$arg1][,$arg2]) nl2br($string):将字符串中的\n解释为html中的br wordwrap($str[,$width[,$break[,$cut]]]):让字符串在指定的位置上强制换行4.6 修改字符大小写 strtolower($str):转小写; strtoupper($str):转大写; ucwords($str):首字母转大写;4.7 计算字符串长度和字符数目 strlen($str):字符串长度; substr_count($str,$needle[,$offset[,$length]]):计算某字符串在另一字符串中出现的次数 $needle:要查询的字符串,$offset:搜索位置(默认0) str_word_count($str[,$format[,$charlist]]):将字符串按单词拆分,只有第一个参数时返回单词数量,有多个参数时返回拆分的数组4.8 字符串查找函数 strstr($str,$needle):查找字符串 strpos($str,$needle[,$offset]):搜索字符串位置4.9 字符串的复制和替换 str_repeat($str,$num):复制 str_replace($str,$replace,$start[,$length]):替换4.10 字符串比较 strcmp(),strcasecmp(),strnatcmp()4.11 正则表达式的概念和语法 基本模式匹配 ^ $ \ 字符集 [a-z] [A-Z] [a-zA-Z] [0-9] [0-9\.\-] [\f\r\t\n] [[:alpha:]] # 字母 [[:digit:]] [[:alnum:]] # 字母和数字 [[:space:]] # 白字符 [[:upper:]] [[:lower:]] [[:punct:]] # 标点符号 [[:xdigit:]] # 16进制数字 com|org|cn #或 重复 {n,n1}:某规则重复n到n1之间的次数(包括两者) ? :0个或1个前面的内容 * :0个或多个前面的内容 + :1个或多个前面的内容 使用正则表达式查找子字符串:ereg(),eregi() ereg($rule,$str[,$regs]):结果放在$regs中 用正则分隔字符串split(),explode() split($rule,$str[,$limit]):以$rule规则分割$str,最多分割$limit个子字符串 explode($str,$rule[,$limit]):第5章 数组5.1 数组基本概念 操作符:[] + == === != !== <>5.2 数字索引数组 初始化:$arr=array('val1','val2'); range($start,$end,$step); 访问数组:$arr[0] 循环访问数组5.3 数组的创建和添加 创建 $arr=array('val1','val2'); $arr=array(1=>'val1','jds'=>'val2'); 添加数组 $arr[]='val';5.4 数组元素的添加和删除 array_unshift:数组头部添加元素 array_push:数组尾部添加元素 array_shift:数组头部删除元素 array_pop:数组尾部添加元素5.5 数组遍历 for ;foreach ;list each;5.6 字符串与数组之间转换 explode():字符串转数组 implode():数组转字符串5.7 多维数组5.8 数组排序 sort:低到高 rsort:高到低 # 键值对应关系会变,对值排序 asort:低到高 arsort:高到低 # 键值对应关系不变,对值排序 ksort:低到高 krsort:高到低 # 键值对应关系不变,对键排序 shuffle():随机排序,键值重新初始化 array_multisort():多维数组排序5.9 数组判断函数 in_array() array_key_exists()5.10 数组合并和拆分 合并: array_merge():第一个数组与第二个数组追加成一个数组 array_combine():第一个数组的值作为键,第二个数组的值作为值生成新的数组 拆分:array_chunk() 数组交集:array_intersect() 数组变成标量:extract()5.11 快速初始化数组 range() array_fill()5.12 数组中查找值 array_search();5.13 定位数组位置 in_array():判断是否在数组中 array_search():搜索给定的值,返回相应键名 array_keys():获取数组所有的键名 array_values():获取数组所有的值第6章 PHP对文件的操作6.1 打开/关闭文件 打开:$file=foppen("path",'r'); # r代表只读 # w代表写入 # a代表指向文件末尾,以写打开 # r+指针在头,读写打开 # x代表目标文件存在警告,不存在新建 关闭:fclose($file);6.2 读取文件 fread()和file() fpassthru():通过打开的文件指针作为参数,将文件信息标准输出到浏览器中,并在输出后关闭 fgets()和fgetss():读取一行 fgetcsv():根据定界符来分开文件中的文字信息6.3 写入文件 fwrite()6.4 方便的处理文件 file_get_contents()和file_put_contents()6.5 其他文件处理函数 copy($source,$dest);//将文件source复制给dest dirname(path);//返回文件所在路径 feof();//指针是否指向文件尾 file_exists($filename);//文件是否存在 file_size($filename);//文件大小6.6 移动指针小案例 ftell():查看指针位置6.7 文件锁定 flock($file,LOCK_SH):读操作锁定 flock($file,LOCK_EX):写操作锁定 flock($file,LOCK_NU):释放已有锁定 flock($file,LOCK_NB):防止加锁阻塞 flock($file,LOCK_UN):解锁第7章 php函数与代码的重用性7.1 定义和调用函数7.2 参数 形参:定义函数时的参数;实参:调用函数时传递的参数 func_num_args():返回参数总数 func_get_args():返回参数具体信息 按值传递、引用传递、默认参数值7.3 函数内的变量范围 随着声明位置的不同而有不同的作用范围 局部变量:函数内部声明 静态变量:static #内存地址不变也不会消失 全局变量:global|$GLOBAL['key']7.4 函数的作用域和可用性7.5 用变量存储函数的名称 PHP会自动解析变量的值是否为一个函数名7.6 递归函数:函数内部直接或间接调用自己本身的语句 其实是耗内存的7.7 使用和包含文件 include() include_once()找不到输出警告继续执行脚本 带once的仅引入一次 require() require_once()找不到输出致命错误终止脚本 带once的仅引入一次第8章 面向对象的程序设计8.1 类和对象的关键概念 类:具有相同特性的对象的集合。在oop术语中,实体的兴致和行为的具体定义成为类 声明:class 类名{var $temp;function 方法名(){}} 对象:在类的基础上创建实体的特定实例 创建对象的过程成为实例化 new关键字 特性: 对象的句柄:用于区分不同的对象 对象的属性:用于描述对象的静态特性(属性) 对象的方法:用于描述对象的动态特性(方法) 用操作符'->'来调用成员属性和方法 类成员的访问控制:public private protected 字段:也称类的属性(成员变量) 可用$this访问 属性:也称类的成员变量,用来保存信息数据 常量:const关键字,存储于对象直接相关的信息,公开可用,不能用$this调用 方法:函数时独立的实现某一功能,成员方法是类的一部分 $this关键字:只能在类内部使用,指向$this所在类的本身 面向对象编程的特性:封装,继承,多态8.2 构造方法和析构方法:对象创建和销毁过程中自动执行 __construct() __destruct()8.3 静态类成员 静态属性 静态方法 调用操作符::8.4 对象克隆 clone 对象名 __clone()方法:克隆的操作期间执行8.5 继承 class child extends parent{} 使用parent::父类方法调用父类的方法 instanceof 关键字检测当前对象是否属于某一个类 覆盖父类的方法:与父类起同名的方法或属性8.6 多态 通过继承实现多态 通过接口实现多态 interface 接口名 #方法都没有函数体 通过class child implements parent{}来实现,其中的方法存在函数体8.7 抽象类和接口 抽象类 抽象类中至少包含一个关键字abstract修饰的抽象方法 抽象方法的不实现具体功能的空方法,只能由子类去继承 所有方法由子类去实现 abstract class 抽象类名称{ abstract function 成员方法1(参数1,参数2..); function 成员方法1(参数1,参数2..); } 接口:成员方法声明的集合 使用类实现接口时,必需包含接口中的所有方法 interface 接口名称{ function 成员方法1(参数1,参数2..); function 成员方法1(参数1,参数2..); } 接口与抽象类的区别 接口没有数据成员,抽象类有数据成员可实现数据封装 接口中没有构造和析构函数,抽象类可以有 接口中的方法都是public类型 一个类可同时继承多个接口,只能继承一个抽象类 接口中不能有实现的方法,自定义的方法只能在继承该接口的类中实现8.8 命名空间
namespace use __NAMESPACE__8.9 特殊方法(魔术方法) __tostring():当对象调用echo|print方法时会输出对象 object id #5 __autoload():第一次引用一个类时调用该方法 __get()|__set():在程序打算获取|设置对象未定义的属性时调用 __call():调用类内未定义的方法时调用第9章 php的错误、异常处理和调试
9.1 常见错误类型 语法错误:缺少分号,括号不完整等 逻辑错误: 未定义错误:未定义变量或常量,未定义有类或函数 环境错误: windows下路径分隔符'\',linux下路径分隔符'/' 操作系统错误 php版本错误 PHP配置错误 运行错误:数据库不存在|数据库表不存在|正包含的文件不在include_path中|PHP服务器进程没有权限访问|网络上的主机因某种原因不允许被访问9.2 错误处理机制 错误级别列表 E_ALL:所有错误和警告 E_COMPILE_ERROR:编译错误 E_COMPILE_WARNING:编译警告 E_CORE_ERROR:内部错误 E_CORE_WARNING:启动时警告 E_ERROR:严重错误,不可恢复 E_NOTICE:运行代码字啊操作一些位置的动作 E_PARSE:编译时解析错误 E_RECOVERABLE_ERROR:被用户自定义的错误处理程序所捕捉 E_SCRICT:版本迁移 E_USER_ERROR:用户定义错误 E_USER_NOTICE:用户定义通告 E_USER_WARNING:用户定义警告 E_WARNING:操作错误 指令:error_reporting=E_ALL 错误处理函数 trigger_error($error_msg[,$error_type]):触发自定义的错误信息函数 自定义错误页面:用header()|include()来进一步实现错误页面跳转|引用 错误日志: 初始化php日志文件:void define_syslog_varialbles(void),使用openlog(),closelog(),syslog()等日志函数时所必需的 打开日志连接:openlog(ident,option,facility) 关闭日志连接:closelog(void) 向日志目标发送消息:syslog(priority,message)9.3 异常处理 异常处理的步骤 应用程序尝试做一些操作 如果尝试失败,则异常处理特性抛出一个异常 指定的处理器捕获该异常,完成必要的任务 异常处理特性清除在尝试期间占用的资源 PHP基本异常类:exception 内置方法: getMessage() getCode() getFile() getLine() getTrace():返回一个包含产生异常代码的回退路径的数组 getTraceAsString():返回一个包含产生异常代码的回退路径的数组并格式化成字符串 __toString():显示一个exception对象,并给出以上所有方法提供的信息,可以重载 try、throw、catch try:使用的异常函数位于try代码块内,如果没有触发异常,则代码继续执行,否则抛出异常 throw:规定如何触发异常 catch:捕获异常并创建一个包含异常信息的对象 示例: ----- <?php function checkNum($num){ if($num>1){ throw new Exception('不能大于1'); } return true; } try{ checkNum(2); } catch(Exception $e){ echo 'Message:'.$e->getMessage(); } ?> ----- 创建自定义的exception类 必须是exception类的扩展,继承exception所有属性,并添加自定义函数 多个异常:if else|switch 重新抛出异常:对用户隐藏系统错误,再次抛出友好的消息异常 设置顶层异常处理器:set_exception_handle()-->可设置处理所有未捕获异常的用户自定义函数 异常的规则 需要进行异常处理的代码放在try内 每个try或throw代码块必须至少拥有一个对应的catch代码块 使用多个catch代码块可捕获不同种类的异常 可以在try内的catch代码块中再次抛出异常(re-thrown) 如果抛出异常,必须捕获它9.4 使用Xdebug进行调试 调试函数echo print_r() var_dump() printf() exit()等函数 Xdebug一款开源的php调试程序第10章 PHP与html交互10.1 PHP和web表单 表单基本操作 表单安全性 验证表单输入 过滤表单数据 全局变量设置:register_globals 常用表单数据验证方法 姓名验证:用正则 日期验证: email验证 密码验证10.2 通过php上传文件 PHP文件上传资源指令:php.ini文件 file_uploads upload_tmp_dir upload_max_filesize post_max_size max_input_time memory_limit max_execution_time 上传错误信息:$_FILE['name']['error']