1 |
函数参数传递方式 |
|
|
|
a)按值传递 b)按址传递&也叫引用传递 c)默认值传递 |
2 |
数据类型转换 |
|
|
|
可以转为除了null和资源型 (int) (bool) (float) (string) (array) (object) |
3 |
测试数据类型 |
|
|
|
is_bool() is_float() is_integer() is_string() is_object() is_array() is_resource() is_null() is_scalar() 是否是标量 |
4 |
字符串函数 |
|
|
|
1.获取字符串长度strlen() 2.截取字符串substr(原字符串, 起始坐标[,截取长度]),负值表示从右往左数第几个 3.转为小写strtolower(原字符串) 4.转为大写strtoupper(原字符串) 5.倒转字符串strrev(原字符串) 6.查询字符第一次出现位置strpos(原字符串,要查询的字符串) 7.查询字符最后一次出现位置strrpos(原字符串,要查询的字符串) 8.截取某字符串第一次出现的位置及以后的字符串strchr(原字符串,要查询的字符串) 9.截取某字符串最后一次出现的位置及以后的字符串strrchr(原字符串,要查询的字符串) 10.去掉左右空格trim()只去掉最前面和最后面的空格 |
3 |
变量关键字 |
|
|
|
global 使全局变量可以在当前函数中使用 static 静态变量的生存周期是整个页面生存周期 更多信息可以查看<PHP面向对象>第3个知识点 |
4 |
模块编程--函数原则 |
|
|
|
内聚性强,耦合性弱 尽量不依赖外部变量 |
5 |
数组 |
|
|
a)数组定义 |
定义方式 ①$arr = array(1,2,3,4,5); ②$arr = array('key'=>'value'); $arr['key'] = value; |
|
b)输出数组 |
输出数组不能使用echo,可以使用var_dump()或print_r(),用echo打印多维数组时只打印第一个元素的类型
|
|
c)常用函数 |
count($arr) 取得数组的元素个数 key($arr) 取得数组的下标 current($arr) 取得数组元素的值 |
|
d)指针移动函数 |
next($arr) 向后移动 prev($arr) 向前移动 end($arr) 移动到最后 reset($arr) 移到到最前 |
|
e)相关函数 |
array keys($arr) 使用数组下标生成一个新数组 array values($arr) 使用数组元素的值生成一个新的数组 |
|
f)数组修改 |
array_shift($arr) 删除数组第一个元素,数组下表会重新排列,返回删除的元素 array_unshift($arr,) 在数组第一个位置插入一个或多个元素,数组下表会重新排列,注意只能插入值,不能指定下标,返回数组长度 array_pop($arr) 删除数组最后一个元素,数组下表会重新排列,返回删除的元素 array_push($arr,) 在数组最后一个位置插入一个或多个元素,数组下表会重新排列,注意只能插入值,不能指定下标,返回数组长度
explode(规则,字符串) 将某个字符串按照一定规则,切分成一个数组 implode(规则,数组) 将一个数组按照一定规则,合并成一个字符串 |
|
g)常用算法 |
冒泡排序 二分查找 前提数组必须是一个有序数组 |
|
h)数组遍历 |
foreach()专门用于数组遍历,执行后指针自动后移 foreach($arr as $value){循环体} foreach($arr as $key=>$value){循环体} |
|
i)随机排序 |
将原数组随机排列 shuffle(原数组)返回值是布尔型,执行成功,返回1,否则返回0,将原数组键值取出来,随机排列,组成一个索引数组 <?php $my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse"); shuffle($my_array); print_r($my_array); ?>输出:
Array ( [0] => Cat [1] => Horse [2] => Dog )
array_rand(原数组,取出的个数) 将原数组键名取出来,随机排列,组成一个新数组,索引数组.如果个数为1,返回值是这个元素的键名,>1返回键名组成的数组 rand(min,max); 取出min到max的随机整数 |
6 |
URL传值 |
|
|
|
1.可以通过超链接跳转 2.可以使用BOM对象location.href实现跳转 3.php的header()函数实现跳转header("location:xxx.php?id=xxx&...");需要注意的是函数前面不能有任何输出,哪怕是一个空格,但是定义变量等不会输出的不会出错 |
7 |
自动全局变量 |
|
|
|
php.in中的register_globals = On;无需再次声明变量,自动以表单中的名字作为变量名(PHP5.4以上版本不再支持,避免了全局变量被不小心重新赋值的问题) |
8 |
文件上传 |
|
|
a)前提条件 |
a)必须以post方式上传 b)必须将enctype上传文件类型,必须设置为multipart/form-data,这种方式,可以支持二进制文件和普通文本信息 |
|
b)原理 |
客户端提交的文件上传到服务器,存放在服务器的临时文件夹,我们需要将这个临时文件复制到想要保存文件的目录,负责,在当前页面的代码执行完后,会删除这个临时文件 |
|
c)$_FIFLES |
超全局数组变量$_FILES $_FILES是二维数组 [表单元素名] []['name']上传的文件原名 []['type']MIME类型 了解 []['tmp_name']临时文件 []['error']错误代码,如果为0,表示上传成功 []['size']文件大小,单位是字节 如果打开了自动全局变量,还会产生几个变量 $photo_name 第一个是表单元素名,文件名 $photo 临时文件 $photo_size 文件大小 $photo_type 文件类型 |
|
d)常用函数 |
copy(原文件,目标文件) move_upload_file(原文件,目标文件) |
|
e)相关配置 |
php.ini中设置的属性 a)打开文件上传file_uploads = on b)设置系统临时路径upload_tmp_dir = c)设置允许上传的最大尺寸upload_max_filesize = d)设置表单以POST方式传递的最大数据尺寸post_max_size = |
|
f)健壮性 |
a)验证上传文件类型 获取文件名,使用strrchr()截取扩展名 b)保证上传文件名的唯一性 时间+IP格式 sessionId 数据库用户Id c)封装上传功能 d)上传多个文件 |
9 |
文件操作 |
|
|
a)资源标号 |
就是程序和资源之间建立的一个通道 |
|
b)常用函数 |
opendir(路径) 打开目录,返回当前目录的资源标号,指针初始在第一文件前面,每执行一次readdir()指针下一一次 readdir(资源标号) 读取资源标号,返回下一文件名称,记住返回的是文件名 rewinddir(资源标号) 指针复位,将指针放在第一文件前 closedir(资源标号) 关闭资源标号 |
|
c)文件夹操作函数 |
bool file_exists(文件或文件夹名) 检查文件或文件夹是否存在 bool is_dir(文件或文件夹名) 检查是否是一个文件夹 bool is_file(文件或文件夹名) 检查是否是一个文件 bool mkdir(文件夹名) 创建文件夹 bool rmdir(文件夹) 删除文件夹,只能删除空文件夹,想删除不为空的文件夹,需要先进入文件夹,遍历所有文件并删除 string getcwd() 返回当前路径 bool chdir() 改变当前工作路径,后续操作执行在新路径中 |
|
d)文件操作函数 |
string file_get_contents(filename) 读取文件内容,由于操作系统换行符和网页换行符不一致,所以需要将操作系统的换行符\n替换成成<br /> array file(filename) 读取文件并以数组形式返回,每个元素代表一行 file_put_contents(filename,data[,flag]) 往文件中写入内容,flag表示写入方式,包括追加和覆盖,默认方式是覆盖FILE_USE_INCLUDE_PATH,追加是FILE_APPEND.这个参数是一个整型,这两个常量值是整形数字,如果使用字符串,将会自动转为整型0 bool copy(要复制的文件,复制后的文件) 复制文件 bool unlink(文件名) 删除文件 bool rename(文件原名,文件新名) 文件或文件夹重命名 bool is_readable(文件名) 测试文件是否可读 bool is_writeable(文件名) 测试文件是否可写 int filemtime(文件名) 测试给出文件的最后修改时间 int filesize(文件名) 取得文件长度 int filegroup(文件名) 取得文件所属组的组号 int fileperms(文件或文件名) 返回文件或文件名的权限,转成8进制后,后三位表示权限,前面表示是文件还是文件夹,40表示文件夹,100表示文件 int filemtime ( string $filename ) 取得文件修改时间 |
|
e)php4中的文件操作 |
fopen(文件名) 返回资源句柄 fclose(资源句柄) 关闭文件 fgetc() 获取一个字节,输出全部时需注意,0会被认为是false fgets() 获取一行 string fread (资源句柄,读取长度)读取最多 length 个字节。该函数在读取完最多 length 个字节数 file_size表示文件字节数 fwrite(资源句柄,写入字符串,最多写入几个字符) fput() 写入数据
fopen()模式 r 只读,将指针指向文件头 r+ 读写模式,将指针指向文件头
w 写入方式,不存在就创建,存在就清空 w+ 读写方式,不存在就创建,存在就清空
a 写入方式,指针指向文件尾,不存在创建 a+ 读写方式,指针指向文件尾,不存在创建 |
|
f)文件操作应用---静态页生成技术 |
模板页,特殊字段标识可以使用如下的格式{*title*} 生成的网页最好是shtml,因为shtml可以支持include文件 |
10 |
文件下载 |
|
|
a)起因 |
html下载的不足<a href=""></a> a)对某些文件无法正常下载,如jpg文件 b)会暴露文件的真实地址 |
|
b)步骤 |
php下载方法 header("Content-type:application/octet-stream"); 以文件流的形式传送文件 header("Content-Disposition:attachment; filename=filename"); 以附件形式下载,给文件设置一个别名 |
11 |
面向对象 |
|
|
a)对象赋值 |
对象之间赋值,是按地址赋值,如$s1 = $s2 s1和s2是一个类的两个对象,这个赋值会是S1 S2占据同一内存地址,如果要解决这类问题,需要使用对象克隆,使两个对象占据不同内存地址$s2 = clone $s1;也可以理解为这就是值传递了 |
|
b)php中的构造和析构方法 |
PHP5中构造方法,__construct(),可以带有参数,析构方法__destruct(),不能有参数自动调用(页面代码运行完毕,或者使用unset()销毁的时候),销毁对象时倒序销毁,先声明的后销毁,如果要按照顺序销毁,就用unset()方法 |
|
c)静态变量 |
static定义的变量不属于任何对象,它属于类本身. 类内使用静态变量的时候需要用 self::变量名 类外使用静态变量需要使用 类名::变量名格式 |
|
d)属性初始化 |
属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。换句话说:类里面变量的初始化不能是一个表达式。 |
|
e)this |
this只能在类内使用,表示当前对象 |
|
f)继承 |
1.扩展的手段 修改优化原类中的瑕疵,增加新的功能 2.代码重用
格式 class 子类 extends 父类
好处 a)一个类继承了另外一个类,会自动继承父类的属性和方法 b)
注意点 a)子类有构造函数,会调用子类自己的构造函数 b)子类没有构造函数,调用父类的构造函数 |
|
g)控制访问 |
private 私有,只能在类内使用,对象和子类都无法使用 protected 受保护的,只能在类内和子类使用 public 公有,对象,类内,子类都可以使用
受保护成员和方法外部访问 a)使用公有方法访问 b)通过构造函数
parent关键字: parent::父类方法名() 调用父类的(同名)函数,且只能用来调用父类方法,不能调用 父类属性 |
|
h)const关键字 |
用于声明常量成员,只能用于成员属性,不能用于成员方法,调用const成员方法与static相似,内部调用使用self:: 类外使用 类名:: 格式类内定义常量用const,类外用define |
|
i)interface接口 |
接口不能被实例化 接口里面只能有定义,不能实现,也就是说只能定义一个方法,但是不能写方法里面的代码 类如果使用了接口(通过implements使用),必须实现接口内定义的所有方法,使用,分割多接口 接口中只能有方法定义,不能有属性. |
|
j)抽象类 |
abstract声明的类叫做抽象类 抽象类可以定义抽象方法 抽象类最少要有一个抽象方法,抽象方法前面需要使用abstract关键字 抽象类是一种不能被实例化的类,抽象类可以被继承 抽象方法在抽象类是不能被实现的,但必须在子类里实现,普通方法可以被实现 |
|
k)final |
可以标识类可以标识成员方法,不能标识成员属性 final标识的类不能被继承,只能被实现 final标识的成员方法不能被覆盖 |
|
l)魔术函数 |
魔术函数都是自动执行的 |
|
|
__autoload() 当实例化一个未定义的类时,会自动加载指定文件 function __autoload($path) { inlude './class/' . $path . '.class.php'; } |
|
|
__set() 为一个未定义的变量(包括外部给私有属性)赋值时,会自动执行(自动创建该变量并赋值) function __set($name, $value) { $this -> $name = $value; //外部给私有属性赋值时出错,用这种方法解决 } |
|
|
__get() 取得一个不存在的属性(包括外部访问私有属性)值时自动执行 function __get($name) { return $this -> $name; } |
|
|
__call() 调用一个不存在的方法时(不包括私有方法),会自动执行,可以在里面加上提示信息,以抑制错误 function __call($name, $args) { echo $this -> $name . '()方法不存在<br />'; //第一个参数表示函数名,第二个代表函数参数数组 } |
12 |
异常处理 |
|
|
|
try { 可能会出现错误或异常的代码 } catch(Exception $..) { 发现错误时执行的语句 }
一般会把错误自动识别和if判断结合起来使用,比如在try中判断flag的值,如果是1,就抛出异常 if($flag==1) { throw new Exception('提示语句'); } |
13 |
xml |
|
|
|
1.DTD要么不用,如果用,就老老实实的写完整,声明各个元素及属性\实体的类型 2.虽然XML元素支持中文,但是在php解析时不好获取,主要是编码问题,需要将中文iconv(),所以建议元素都用英文,类unix系统对中文支持更差 |
附:
1 |
.和.. |
操作系统在每一个文件夹下建立了两个目录,分别是.和.. 代表当前目录和上级目录 |
2 |
文件遍历 |
读取一个文件夹下所有文件的方法,在输出文件名或文件夹名带有中文,由于各操作系统默认编码不一样,比如windows是gbk,所以如果网页编码是utf-8会显示乱码 1)$dir = opendir(); while(1) { $file = readdir($dir); if(!$file) { break; } echo $file; } closedir();
2)$dir = opendir(); while($file = readdir($dir)) { echo $file; } closedir();
3)使用dir类实例化一个对象 $dir = dir(); while($file = $dir -> read($dir)) { echo $dir; } $dir -> close();
4)scandir数组 $arr = scandir(); foreach ($arr as $value) { echo $value; } |
3 |
单引号双引号区别 |
单引号不转义,包括变量和转义字符如制表符换行符等.所以在往文件中写换行符之类的时候,要用双引号 |
4 |
代码规范 |
html代码和php代码混编时,最好把php代码放在html前面,虽然一般情况下不会有什么问题,但是如果有header("location:");跳转就不行了,当然类似的要求之前没有输出的都会出这个问题 |
5 |
配置zend调试 |
zend_extension_ts=D:/Server/php/ext/ZendDebugger.dll zend_debugger.allow_hosts=127.0.0.1,192.168.1.100 zend_debugger.expose_remotely=always |
原创作品,请勿转载,如确需转载请保持文章完整并注明出处,谢谢合作。
(许坤,php工程师,PHP工程师,互联网研发工程师,软件工程师)
原文地址:http://www.cnblogs.com/quinnxu/archive/2012/07/18/2597289.html