PHP
1.1使用array创建数组
//创建一个带有索引的数组
$speed = array(“aa"=>50,2=>120,3=>260,4=>300);
//创建一个二组数组
$two = array(
"color" => array("red","blue","green"),
"numbers" => array(1,2,3,4,5,6,7,8,9)
);
1.2 使用compact()创建数组
2. compact() 接受可变的参数数目。每个参数可以是一个包括变量名的字符串或者是一个包含变量名的数组,该数组中还可以包含其它单元内容为变量名的数组
1.2使用compact()创建数组
foreach($result as $key=>$value)
{
echo $key,"=>",$value,"
";
}
输出:
event=>SIGGRAPH
city=>San Francisco
state=>CA
1.3 使用range()创建数组
如果使用array()函数,建立一个包含100个元素的数组,每个元素的值之间都有一定的规律,在实际操作中是比较麻烦的。在这种情况下,就可以使用range()函数的自动功能来完成类似的操作。
array range(int start ,int end [,int step] )
2. 输出和测试数组
使用print_r()函数输出:
print_r($array);
使用循环控制语句输出:
foreach($array as $key=>$value)
{
echo $key,"=>",$value,"
";
}
使用is_array()函数测试参数是否为数组类型,如果是返回true,否则返回false:
$states=array("aa","bb");
echo "\$states is an array:".is_array($states)."
";
3.增加和删除数组元素
通过赋值增加数组元素
$arrays=array("河南"=>"郑州");
$arrays["江西"]="南昌“;
使用array_push()函数追加数组元素(入栈)
int array_push ( array &array, mixed var [, mixed ...] )
使用array_pop()返回数组的最后一个元素(出栈)
mixed array_pop ( array &array )
使用array_shift()返回数组的第一个元素
mixed array_shift ( array &array )
使用array_unshift()增加元素到数组头
int array_unshift ( array &array, mixed var [, mixed ...] )
使用array_pad()函数修改数组的大小,使其增加到指定的长度
3.增加和删除数组元素
示例:
";
array_push($stack, "array_push");
print_r($stack);print "
";
array_pop($stack);
print_r($stack);print "
";
array_shift($stack);
print_r($stack);print "
";
array_unshift($stack,"array_unshift");
print_r($stack);print "
";
?>
4.1定位数组
当一个数组有很多元素时,使用数组遍历来求证某个值或键名是否存在,在速度和效率上有一定的损失。PHP提供了in_array()和array_key_exists()函数,可以快速从一个数组中取得某个值或键名是否存在
in_array()示例:
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
array_key_exists()示例:
$search_array = array("first" => 1, "second" => 4);
if (array_key_exists("first", $search_array))
{
echo "tihs first is the array";
4.1定位数组
对数组的操作主要是针对键名或值,在不想破坏被访问数组的情况下,可以把这个数组的键名或值,单独取出来进行操作,要想返回一个数组中单元的键名,可以使用array_keys()函数,返回单元的值,可以使用array_values()函数。
使用array_keys()与array_values()这两个函数取回的键名或值,都会保存的新数组中
array_keys()示例:
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
4.2 遍历数组
很多情况下我们都需要对数组进行遍历以获得各个键和值,PHP提供很多了很多函数来完成类似的任务
下面列举一些常用的函数
Key()
返回数组中当前单元的键名。
Reset()
将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。
Each()
返回数组中当前的键/值对并将数组指针向前移动一步
Current()
返回数组中的当前单元的值
End()
将数组的内部指针指向最后一个单元
Next()
将数组中的内部指针向前移动一位
Prev()
将数组的内部指针倒回一位
4.2 遍历数组
0, "color" => "red",55,"two"=>array(1=>3,5,6,7));
function dg($arr)
{
$flag=reset($arr);
while(!is_bool($flag))
{
$key=key($arr);
$value=current($arr);
if(is_array($value))
{
dg($value);
}
else
{
echo $key.":".$value,"
";
}
$flag=next($arr);
}
}
dg($array);
?>
4. 数组排序
数据排序时计算机科学中的核心问
,PHP也提供了很多对数组的排序函数
简单排序
(键/值关联不再保持)
sort()、rsort()。
根据关键字排序
ksort()、krsort()
根据值排序
asort()、arsort()
自然语言排序
natsort()、natcasesort()、
多维排序
array_multisort()
用户自定义的规则排序
usort()
4. 数组排序
"lemon", “o"=>"orange", "b"=>"banana", “a"=>"apple");
foreach ($fruits as $key => $val) {
echo "$key = $val","
";
}
echo "
";
sort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val","
";
}
?>
4.其他常用数组函数
合并和拆分数组的函数
array_combine()
Array_merge()
Array_merge_recursive()等
随机返回数组键的函数
Array_rand()
随机排序函数
Shuffle()
求和函数
Array_num()
值总数 count()
对下面的数组进行遍历,然后输出。
要求使用两种不同的方法
$arr = array("lemon", "a"=>"orange", "b"=>array(6,3,44,7), "c"=>"apple");
输出结果参照下面的:
0:lemon
a:orange
b:6,3,44,7,
c:apple
第五讲 面向对象
PHP提供几种在脚本中包含文件的主要途径。
Include() 和 require()
他们的使用方式如下:
被引用的文件不一定非要使用扩展名.php,你可以自己随便定义
区别:require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果想在丢失文件时停止处理页面,那就别犹豫了,用 require() 吧。include() 就不是这样,脚本会继续运行。
注意:课本上63页介绍的并不准确了
课程目标
一、什么是面向对象(理解)
二、类和对象(掌握)
三、类的成员(掌握)
四、构造函数和析构函数(掌握)
五、其他关键字和辅助函数(了解)
第一 什么是面向对象
面对对象技术的基本观点如下:
(1)客观世界由对象组成。
(2)具有相同数据结构和操作的对象可归纳成类。
(3)类可以派生出子类,子类除了继承除了继承父类的全部特性外还可以有自己的特性
(4)对象之间的联系通过消息传递来维系。
PHP的WEB技术面向对象是仿造现实对象建立的,他们也有状态和行为。软件对象在一个 或多个变量中维护它的状态。变量是一个由
符命名的数据项。对象用方法实现它的行为。方法是与一个对象相关联的函数(子过程)。
对象有二个性质:状态(state)和行为(behavior)。
对象是一个封装数据属性和操作行为的实体.
类的实例化:
");
}
}
//下面创建类实例
$name1=new myName("周洲");
$name2=new myName("周阳");
$name3=new myName("周文");
?>
类的成员
第一 字段
1、声明字段
Class Staff
{
public $name="lucky";
private $age=25;
}
2、使用字段
与变量不同,使用字段要使用->操作符,而不是美元符号
$employee=new Staff();
echo $employee->name;
当在定义字段的类中引用字段时要使用$this关键字。$this
示当前类
第二 属性
1、__set() //两个下划线
Class Staff
{
public $name="lucky";
function __set($propname,$propvalue)
{
echo "Noexistent varible:\$$propname";
}
}
可用来验证某个属性是否存在或增加新的属性
2、__get() //两个下划线
Class Staff
{
public $name="lucky";
function __get($propname)
{
return $this-> $propname;
}
}
它接受一个属性名作为输入参数,获取该属性的值。
3、 自定义获取方法和设置方法
访问类成员变量有一个特殊的一指针$this。通过该指针,可以方便地访问类属性或者给类属性赋值。
class Person
{
var $name; //定义属性
function get_name() //无参数
{
return $this->name; //$this去访问和设置当前对象的$name属性
}
function set_name($new_name) // 有参数
{
$this->name = $new_name; //同上注释
echo $this->name;
}
}
第三 方法
方法和函数非常相似,只不过方法是用来定义特定类的行为。与函数一样,方法可以接受参数,并可以返回一个值。方法的调用只是在方法前面加上调用方法的对象的名称,如下
$object->methodname();
1、声明方法
Class Staff
{
public function show()
{
echo "调用了方法";
}
}
2、调用方法
$employee=new Staff();
$employee->show();
控制对类的成员访问
(1)public :在任何位置都可以读取和修改这个成员变量或者调用这个方法。这个修饰符在外部代码使用,由给定类中的代码使用,或者在扩展给定类的功能的类中使用。
(2)private : 只有这个类中的代码才能读取和修改私有变量或者调用私有成员函数。其他代码、类或者扩展这个类的功能类(子类)不能使用私有条目。
(3)protected : 外部代码与给定类不相关的其他类不能读取或者修改使用了关键字protected的成员变量,也不能调用受保护的成员函数。
构造函数
构造函数是类中的一个特殊函数,当使用 new 操作符创建一个类的实例时,构造函数将会自动调用。
Php5中以__construct()作为构造函数。而php4中是以将和类名相同的函数作为构造函数。为了兼容php5先寻找__construct(),如果找不到再寻找以类名命名的构造函数
如果一个类没有构造函数,则调用基类的构造函数,如果有的话。
Class Staff
{
function __construct() //两个下划线
{
echo "调用了构造函数";
}
function Staff()
{
echo "调用了构造函数2";
}
}
$employee=new Staff();
析构函数
析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
脚本执行结束时,php会撤销内存中的所有对象,因此如果实例化时创建的信息都会保留到内存中,就不需要显式的声明析构函数。但是如果创建了不那么容易丢失的数据时(例如连接数据库)就应当定制析构函数进行销毁数据。
Class Staff
{
function __construct()
{
echo "调用了构造函数";
}
function __destruct()
{
echo "调用了析构函数";
}
}
$employee=new Staff();
静态类成员
当需要要一些所有类对象共享的字段和方法时就需要创建一些静态的字段和方法。
Class Staff
{
public static $name="静态字段";
static function show()
{
echo self::$name,"
";
}
}
echo Staff::$name,"
";
Staff::show();
Instanceof
使用instanceof关键字可以判断某个对象是否是某个类的实例。
Class Staff
{
}
$manager=new Staff();
if($manager instanceof Staff)
echo "yes";
面向对象2
对象克隆
有的时候我们需要在一个项目里面,使用两个或多个一样的对象,如果你使用“new”关键字重新创建对象的话,再赋值上相同的属性,这样做比较烦琐而且也容易出错,所以要根据一个对象完全克隆出一个一模一样的对象,是非常有必要的,而且克隆以后,两个对象互不干扰。
class Person
{
public $name="张三"; //人的名子
public $sex="男"; //人的性别
public $age=20; //人的年龄
//这个人可以说话的方法, 说出自己的属性
function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."
";
}
}
$p1=new Person();
$p2=clone $p1;
$p1->say();
$p2->say();
在PHP5中我们使用”clone”这个关键字克隆对象;
class Person
{
public $name="张三"; //人的名子
public $sex="男"; //人的性别
public $age=20; //人的年龄
//这个人可以说话的方法, 说出自己的属性
function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."
";
}
}
$p1=new Person();
$p2=clone $p1;
$p1->say();
$p2->say();
PHP5定义了一个特殊的方法名“__clone()”方法,是在对象克隆时自动调用的方法,用“__clone()”方法将建立一个与原对象拥有相同属性和方法的对象,如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法。
在Person类中增加如下方法:
function __clone()
{
$this->name="我是假的";
$this->age=30;
}
继承(extends)
什么是继承
继承性是面向对象程序设计语言不同于其他语言的最主要的特点.继承是指子类可以自动拥有父类的全部属性与操作的机制.
继承带来了以下的好处:
1.子类在超类提供的共有元素的基础上提供特殊化的行为。通过使用继承,程序员可以多次重用超类中的代码。
2.程序员可以实现称为“抽象类(abstract class)”的超类,它定义了“通用的”行为和共同拥有的状态。抽象超类定义并可能部分实现了这些行为,但是类的一部分未被定义并且未被实现。其他程序员可以在特殊化子类中填充细节。
operationA();
$_b->attributeA = 100;
$_b->operationB();
$_b->attributeB = 100;
?>
PHP不支持多重继承
抽象方法和抽象类
什么是抽象方法?
我们在类里面定义的没有方法体的方法就是抽象方法,所谓的没有方法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰;
只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类,抽象类也要使用“abstract”关键字来修饰;在抽象类里面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明为抽象类,使用”abstract”来修饰。
abstract class Demo
{
public $test;
abstract function fun1();
abstract function fun2();
function fun3()
{
…
}
}
//抽象类不能直接实例化为对象,必须有子类继承之后再实例化
接口(interface)
PHP 5引入了接口,是多重继承问题的解决方法!
接口的思想是指定一个实现了该接口的类必须实现的一系列函数。需要注意的是,只要某个类执行了某个接口,那么该类中必须实现该接口中所定义的每个方法!否则程序会报错!你可以把接口理解为类的
。
PHP规定用interface来定义一个接口,然后用implements让类执行一个接口!
接口对于以下情况有用:
(1)获得无关类之间的类似之处,而不必勉强地实施类关系。
(2)声明一个或多个类可能要实现的方法。
(3)显露对象的编程接口,而不必显露它的类。
//使用“implements”这个关键字去实现接口中的抽象方法
第7章 字符串
1.字符串定义
字符串的定义
$str=“abclcdfg”;
一个字符串变得非常巨大也没有问题,PHP 没有给字符串的大小强加实现范围,所以完全没有理由担心长字符串。
语法:
字符串可以用三种字面上的方法定义:
单引号 ‘’
双引号 “”
定界符 <<<
1.1单引号
指定一个简单字符串的最简单的方法是用单引号(’)括起来。
例如: $str1=‘phpchina’; //str1赋值
用于单引号字符串的转义序列\’解释为一个单引号,\\解释为一个反斜杠(\)。任何其他反斜线的出现仅仅被解释为一个反斜杠。
注: 和其他两种语法不同,单引号字符串中出现的变量和转义序列不会被变量的值替代。
1.1示例
“;
$path='C:\\WINDOWS';//转义一个反斜杠
echo $path."
";
$nope='\n';//不是转义
echo $nope;
$name='world';
$str='Hello,$name';//不会替代变量值
echo $str;
?>
1.2双引号
如果用双引号(“)括起字符串,PHP 就能识别更多特殊字符的转义序列:
转义字符:
\”
双引号
\n
换行
\r
回车
\t
制表符
\\
反斜杠
\$
美元符
此外,如果试图转义任何其它字符,反斜线本身也会被显示出来!
1.3定界符
给字符串定界的方法是使用定界符语法:(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。结束标识符必须从行的第一列开始。定界符文本表现的就和双引号字符串一样,在定界符文本中不需要转义引号。
1.3示例
2.字符串的输出
echo
语法: echo "string arg1, string [argn]...";
它是语言结构,不是真正的函数。它和print的区别在于,可以接受多个参数。
例如:echo “first”,”second”,”third”;//合法
echo (“hello”,”world!”);
//解析错误
print( )
语法: int print(string arg);
本函数输出字符串。若成功则返回 1,失败则返回 0。例如传输中途客户的浏览器突然挂了,则会造成输出失败的情形。
例如:if(!print(“Hello,world”))
{
die(“you’re not listening to me!”);
}
3.字符串索引
字符串是一个有序的字符集合,那么既然是有序的,我们就应该可以提取其中任意的字符,我们看下面实例:
我们用浏览器进行输出:
DDoouubblleedd
4.字符串操作符
字符串连接符(.)
在PHP中有且仅有一个操作符,那就是字符串的连接符(.),它可以将两个字符串元素进行连接,然后依照连接的顺序,将两个字符串按照顺序组成一个新的字符串 .
$my_string = "hello"."world";
串联字符串(.=)
就像我们的算术运算符一样,PHP的字符串操作符的串联也有它简短形式(.=),它是下面这种结构:
$my_string_var .= $new_addition;
它等价于:
$my_string_var = $my_string_var.$new_addition;
5.字符串处理
1.获取字符串长度
2.比较两个字符串
3.处理字符串大小写
4.修整字符串
5.字符串和HTML互相转换
6.字符串分割与拼接
5.1 获取字符串长度
函数strlen()返回一个字符串里的字符数:
$string = ‘Hollo,world’;
$length = strlen($string); //$length为11
5.2 比较两个字符串
1. 可以直接使用比较运算符(<,>, ==, ===,<=,>=)比较字符串。
==和===的区别:这两个操作符不同之处在于如何处理非字符串操作数。==操作符将非字符串操作数转换成字符串,所以它报告3和“3“是相等的。===操作符不进行转换,并且如果参数的类型不同则返回false。
2.使用函数比较字符串
函数: strcmp ( )
//区分大小写;
语法:int strcmp ( string str1, string str2 )
返回值: 如果str1大于str2返回1;如果str1小于str2返回-1;如果str1等于str2返回0;
函数: strcasecmp ( )
//用法作用同上,只是不区分大小写
5.3 处理字符串大小写
函数: strtolower( )
语法: string strtolower(string str);
返回值: 字符串
本函数将字符串 str 全部变小写字符串。
函数: strtoupper( )
语法: string strtoupper(string str);
返回值: 字符串
本函数将字符串 str 全部变大写字符串。
5.3 处理字符串大小写
函数:ucfirst( )
将字符串第一个字符改大写。
语法: string ucfirst(string str);
返回值: 字符串
函数:ucwords( )
将字符串每个单词第一个字母改大写。
语法: string ucwords(string str);
返回值: 字符串
本函数返回字符串 str 每个字的字首字母全都改成大写。
第8章 文件和目录的操作
8.1 路径与磁盘操作
文件系统函数操作文件的同时,一定会涉及到对路径的相关操作。路径又分为相对路径和绝对路径,相对路径是以操作的文件所在目录为起点的路径;绝对路径是以当前文件所在盘符为起点的路径。本节主要介绍关于路径和磁盘方面的函数。
8.1.1 获取文件路径的信息
使用pathinfo()函数,可以对指定的路径和文件名进行解析,并返回一个数组。下面演示pathinfo()函数的使用方式,
获取文件路径的信息
$value){
echo "$key=>$value
";
}
?>
8.1.2 获取路径中的文件名部分
虽然pathinfo()函数返回的数组,已经包括了指定路径与文件名的文件名部分,但其值是保存的数组里的。PHP提供了basename()函数,可以快速的获取指定文件的文件名部分,而不用从数组中读取。下面演示basename()函数的使用方法,代码如清单所示。
清单 获取路径中的文件名部分
8.1.3 获取路径中的目录部分
使用dirname()函数,可以快速的获取指定文件的路径部分。
dirname()函数是根据目录分割符,来取得路径中路径部分的。在windows系统下,“/”与“\”都可以作为目录分割符,其他系统使用“/”作为分割符。
8.1.4 寻找与模式匹配的文件路径
glob()函数可以根据指定的条件,来寻找与条件相符的文件或目录,并通过数组返回。
代码清单 寻找与模式匹配的文件路径
";
}
?>
8.1.5 获取目录中的可用空间
disk_free_space()函数可以根据文件系统和磁盘分区,返回指定目录当前可以使用的字节数。
c:可用空间为:".$m;
?>
8.1.6 获取目录的磁盘总大小
disk_total_space()函数可以根据文件系统和磁盘分区,返回指定目录的空间大小。
清单 获取目录的磁盘空间大小
c:盘大小为:".$m."M";
?>
8.2 文件属性的操作
文件属性包括文件的大小、修改时间、所有者、权限、类型等信息。通过了解文件的属性,可以帮助程序员判断文件现在的状态,对文件实现更细致的管理。
8.2.1 获取文件统计信息
使用stat()函数,可以获取参数指向文件的统计信息
清单 stat()函数使用方法
$value)
echo "键名:$key:单元值:$value
";
?>
8.2.2 通过文件句柄获取文件统计信息
使用fstat()函数,可以获取文件统计信息。
$value)
echo "键名:$key:单元值:$value
";
?>
8.2.3 获取文件相关信息
虽然可以使用stat()、fstat()函数,取得文件属性,但是每次使用文件属性时,都需要对数组进行访问。PHP提供了更加简捷的方法,来访问文件的某一个文件属性。这些函数主要包括:
fileatime()函数,用于取得文件的上次访问时间。
filectime()函数,用于取得文件的inode修改时间。
filegroup()函数,用于取得文件的组。
fileinode()函数,用于取得文件的inode。
filemtime()函数,用于取得文件修改时间。
fileowner()函数,取得文件的所有者。
fileperms()函数,取得文件的权限。
filesize()函数,取得文件大小。
filetype()函数,取得文件类型。
8.2.4 修改文件访问和修改时间
使用touch()函数,可以改变指定文件的访问和修改时间。
{$filename}的修改时间是:".date("F d Y H:i:s.", filemtime($filename));
//使用指定时间,作为文件的最后访问和修改时间
touch($filename,time()-1000);
clearstatcache();//清除文件属性缓冲
echo "
{$filename}的最后访问时间是:".date("F d Y H:i:s.", fileatime($filename));
echo "
{$filename}的修改时间是:".date("F d Y H:i:s.", filemtime($filename));
//使用指定时间,作为文件的最后访问时间
clearstatcache();//清除文件属性缓冲
touch($filename,time()-2000,time()+2000);
echo "
{$filename}的最后访问时间是:".date("F d Y H:i:s.", fileatime($filename));
echo "
{$filename}的修改时间是:".date("F d Y H:i:s.", filemtime($filename));
?>
8.3 操作目录
目录在文件系统中是一个重要的概念,专业的术语把其解释成存储在磁盘上的文件及其他目录的索引,也可以将其视为一个文件夹,在文件夹中,可以放置其他的文件或文件夹,从而使得计算机的文件系统井井有条。最顶层的目录称为根目录,在PHP中用“/”或“\\”代表。“.”代表当前目录,“..”代表上级目录。
8.3.1 打开目录句柄
目录和文件的访问,都是通过句柄实现的,使用opendir()打开一个目录句柄,以便其他目录函数使用
8.3.2 新建目录
新建和删除目录属于文件系统函数,为了方便读者,把这两个函数放在本节中进行统一讲解。新建目录演示代码如下所示。
8.3.3 删除目录
rmdir()函数会试图删除要求的目录,但是目录必须为空并具有相应的权限。代码如下所示。
删除目录要注意的问题:
以上代码尝试删除根目录下名为“temp”的目录。
目录删除成功将返回TRUE,如果删除失败将返回FALSE,并显示错误信息,可以使用“@”符号来抑制错误信息的输出。
8.3.4 取得当前工作目录
getcwd()函数用于获取当前的工作目录,通过对返回值的判断,确定当前操作的目录是否正确。代码如下所示。
获取当前工作目录时要注意的问题:
此函数运行时将返回一个字符串,记录当前目录情况。
失败将返回FALSE。
8.3.5 改变当前目录
通过操作chdir(),可以改变当前目录,以定位到可用资源,改变当前目录的演示代码如下所示。
”; // 显示当前目录
chdir(‘html’); //改变当前目录
echo getcwd().“
”; // 显示当前目录
?>
在使用chdir()函数时,要注意以下问题:
本例中的chdir()将当前目录更改为“html”。
成功返回TRUE,失败将返回FALSE。
8.3.6 从目录句柄中读取条目
使用readdir()函数,会从目录句柄中读取下一个文件的文件名。配合while循环可以实现对目录的遍历
';
/* 这是正确地遍历目录方法 */
while (false !== ($file = readdir($handle))) {
$file = iconv(“GB2312”, “UTF-8”,$file); //防止出现中文目录时为乱码
echo "$file
";
}
/* 这是错误地遍历目录的方法
while ($file = readdir($handle)) {
echo "$file
";
}*/
closedir($handle);
}
?>
8.3.7 列出指定路径中的文件和目录
使用scandir()函数可以实现这个功能,并能按照参数对列出的目录进行排序,默认的排序顺序是按字母升序排列。如果使用了可选参数 (第二个参数设为 1),则排序顺序是按字母降序排列。
8.3.8 关闭目录句柄
在使用完opendir()打开的目录句柄后,应使用closedir()进行关闭,以节省服务器资源,代码如下所示。
8.4.2 打开文件
在学习打开文件之前先看一段代码。代码如下所示。
8.4.2 读取文件
文件操作中最频繁的应该是读取操作,所以在读取文件时一定要注意优化代码,这样才能从代码层面提高程序质量
代码里的fread(),就是基本的读取文件函数,它的原型如下所示。
string fread ( int $handle, int $length )
8.4.3 写入文件
写入文件操作具有重大的意义,软件运行时计算出来的数据,用户提交、修改的信息,通常都需要保存下来,供以后使用。而把数据写入文件,就是其中的解决
之一。为了方便理解,先看一段简单的写入文件的程序,代码如下所示。
8.4.4 关闭文件
关闭文件正确的说法是关闭一个已经打开的文件句柄,在上面几个小节的学习中,都使用了这个函数,即:fclose();
fclose()只有唯一的一个参数,即文件句柄。使用fopen()或f