学习笔记:基础+文件操作(上传|下载)+面向对象+xml

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

原文地址:https://www.cnblogs.com/quinnxu/p/2597289.html