收藏 分享(赏)

PHP程序设计02-2.ppt

上传人:hyngb9260 文档编号:4529524 上传时间:2019-01-02 格式:PPT 页数:64 大小:330KB
下载 相关 举报
PHP程序设计02-2.ppt_第1页
第1页 / 共64页
PHP程序设计02-2.ppt_第2页
第2页 / 共64页
PHP程序设计02-2.ppt_第3页
第3页 / 共64页
PHP程序设计02-2.ppt_第4页
第4页 / 共64页
PHP程序设计02-2.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第2章 PHP语言基础-2,主 讲:田 旭 Email:,PHP程序设计,第2章 PHP语言基础-2,PHP语法概述 PHP变量 PHP运算符 表达式 控制语句 数组 函数 日期和时间处理,数组,PHP中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表,字典,集合,栈,队列以及更多可能性。,数组,数组初始化 数组类型 枚举数组 关联数组 多维数组 数组的应用 。,数组初始化-使用数组标识符,数组标识符是一组内空的方括号。用方括号的语法新建/修改 ,通过在方括号内指定键名来给数组赋值,

2、也可省略键名。其语法如下: $arrkey = value; $student = value; 其中key可以是integer或string,value可以是任何值 如数组不存在,将新建一个 一般情况下,下标从0开始按顺序分配给数组。也可以随机分配。,数组初始化,注: 如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值 +1。如果当前还没有整数索引,则键名将为0。如果制定的键名已经有值了,该值将被覆盖。 自PHP 4.3.0起,上述的索引生成方法改变了。如果给一个当前最大键名是负值的数组添加一个新值,则新生成的的索引将为零(0)。以前新生成的索引为当前最大索引加一,和正值

3、的索引相同。 注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下例子说明了:,数组初始化, $value) unset($array $i ); print_r($array); / 添加一个元素(注意新的键名是 5,而不是0) $array = 6; print_r($array); / 重新索引: $array = array_values($array); $array = 7; print_r($array); ?,上例将产生如下输出:Array (0 = 11 = 22 = 3 3 = 4 4 = 5 )Array ()Array

4、(5 = 6)Array ( 0 = 6 1 = 7 ),数组初始化-使用array()函数,用array() 可新建一个array。它接受一定数量用逗号分隔的 key = value 参数对。 如:array( key = value , . )/ key可以是integer或者string, value可以是任何值 举例 $arr = array(“foo“ = “bar“, 12 = true); echo $arr“foo“; / bar echo $arr12; / 1,数组类型,枚举数组 下标为整数的数组称为枚举数组或数字索引数组 数组索引号默认从0开始,依次增加 关联数组 下标为

5、字符串的数组称为关联数组或字符串索引数组 使用TRUE作为键名将使integer 1成为键名。使用FALSE作为键名将使integer 0成为键名。 使用NULL作为键名将等同于使用空字符串。 使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样。 不能用数组和对象作为键名。这样做会导致一个警告:illegal offset type。,数组类型,多维数组array(6 = 5, 13 = 9, “a“ = 42); echo $arr“somearray“6; / 5 echo $arr“somearray“13; / 9 echo $arr“somearr

6、ay“a“; / 42 ?,数组的应用 unset()函数,unset()函数删除数组元素,释放给定的变量 void unset ( mixed var , mixed var , . ) 在PHP3中,unset()返回TRUE(整型值1),而在PHP4中,unset()不再是一个真正的函数:而是一个语句,没有返回值。试图获取unset()的返回值将导致解析错误。 unset()在函数中的行为会依赖于想要销毁的变量的类型而有所不同。 例_array_1.php,数组的应用 foreach函数,PHP4包括了foreach结构,是一种遍历数组简便方法。仅能用于数组。有两种语法,第二种比较次要但

7、却是第一种的有用的扩展。 foreach (array_exp as $value) statement foreach (array_exp as $key = $value) statement 第一种格式遍历给定的array_exp数组。每次循环中,当前元素的值被赋给$value并且数组内部的指针向前移一步(下次循环中将会得到下一个元素)。 第二种格式做同样的事,同时当前元素的键值也会在每次循环中被赋给变量$key。,数组的应用 foreach函数,注: 当foreach开始执行时,数组内部的指针会自动指向第一个元素。不需要在foreach循环之前调用reset()。 foreach操作

8、的是指定数组的一个拷贝,而不是该数组本身。即使有each()的构造,原数组指针也没有变,数组元素的值也不受影响。 foreach不支持用“”来禁止错误信息。 例_foreach.php,数组的应用 转换为数组,对于任何的类型:整型、浮点、字符串、布尔和资源,如果将一个值转换为数组,将得到一个仅有一个元素的数组(其下标为0),该元素即为此标量的值。 如果将一个对象转换成一个数组,所得到的数组的元素为该对象的属性(成员变量),其键名为成员变量名。 如果将一个NULL值转换成数组,将得到一个空数组。,数组的应用 each函数,array each ( array $array ) 返回array数组

9、中当前指针位置的键值对并向前移动数组指针。键值对被返回为四个元素的数组,键名为0,1,key和value。元素0和key包含有数组元素的键名,1和value包含有数据。 如果内部指针越过了数组的末端,则each()返回 FALSE。 例例_each.php,运行结果: Array 1 = bob value = bob 0 = 0 key = 0 ,数组的应用 list()语句,void list ( mixed . ) list()不是真正的函数,而是语言结构。用一步操作给一组变量进行赋值。 list()仅能用于数字索引的数组并假定数字索引从0开始。 each() 经常和list()结合使用

10、来遍历数组 在执行each()之后,数组指针将停留在数组中的下一个元素或者当碰到数组结尾时停留在最后一个元素。如果要再用each遍历数组,必须使用 reset()。 例_list.php,数组的应用 list()语句,list()从最右边一个参数开始赋值。当我们用了具有索引的数组时,通常期望得到的结果和在list()中写的一样是从左到右的,但实际上是以相反顺序赋值的。而用单纯的变量则没有问题。 例产生如右输出(注意元素顺序和list()中所写的顺序的比较):,array(3) 2= string(8) “caffeine“1= string(5) “brown“0= string(6) “co

11、ffee“,数组的应用 array_slice()函数,array array_slice ( array array, int offset , int length ) array_slice()返回根据offset和length参数所指定的 array数组中的一段序列。 如果offset为正,则序列将从array中的此偏移量开始。如果offset为负,则序列将从array中距离末端这么远的地方开始。 如果给出了length并且为正,则序列中将具有这么多的元素。如果给出了length并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset开始一直到array的末端

12、。 注意array_slice()将忽略键名,并且是根据元素在数组中的实际位置来计算偏移量和长度的。 例_array_slice.php,数组的应用 array_shift()函数,mixed array_shift ( array array ) array_shift() 将array的第一个元素移出并作为结果返回,将array的长度减一并将所有其它元素向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果array为空(或者不是数组),则返回NULL。 注: 使用本函数后会重置(reset())数组指针。,数组的应用 array_pop()函数,mixed array_po

13、p ( array array ) array_pop()弹出并返回array数组的最后一个元素,并将数组array的长度减一。如果array为空(或者不是数组)将返回NULL。 注: 使用本函数后会重置(reset())数组指针。,数组的应用 array_unshift()和array_push(),int array_unshift ( array array, mixed var , mixed . ) array_unshift() 将传入的元素插入到array数组的开头。元素是作为整体被插入的,因此传入元素将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不

14、变。 返回array数组新的元素数目。 int array_push ( array array, mixed var , mixed . ) array_push() 将array当成一个栈,并将传入的变量压入array的末尾。array的长度将增加入栈变量的数目。,数组的应用 array_splice()函数,array_splice - 把数组中的一部分去掉并用其它值取代 array array_splice ( array input, int offset , int length , array replacement ) array_splice()把input数组中由offse

15、t和length指定的元素去掉,如果提供了replacement参数,则用replacement数组中的元素取代。返回一个包含有被删除元素的数组。 如果offset为正,则从input数组中该值指定的偏移量开始删除。如果offset为负,则从input末尾倒数该值指定的偏移量开始删除。 如果省略length,则删除数组中从offset到结尾的所有部分。如果指定了length并且为正值,则删除这么多单元。如果指定了length并且为负值,则删除从offset到数组末尾倒数length为止中间所有的元素。 小窍门:当给出了replacement时要删除从offset数组末尾所有元素时,用count

16、($input)作为length。 如果给出了replacement 数组,则被删除的元素被此数组中的元素替代。如果offset和length的组合结果是不会删除任何值,则 replacement 数组中的元素将被插入到offset指定的位置。 小窍门:如果用来替换的值只是一个元素,那么不需要给它加上array(),除非该元素本身就是一个数组。,数组的应用 array_splice()函数,以下的表达式具有同样效果: 返回一个包含被删除元素的数组。,数组的应用 浏览数组元素,current - 返回数组中的当前元素 mixed current ( array array ) 每个数组中都有一个

17、内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个元素。 current()数返回当前被内部指针指向的数组元素的值,并不移动指针。如果内部指针指向超出了元素列表的末端,current()返回FALSE。 警告如果数组包含有空的元素(0或者“”,空字符串)则本函数在碰到这个元素时也返回FALSE。这使得用current()不可能判断是否到了此数组列表的末端。要正确遍历可能含有空元素的数组,用each()函数。 pos - 得到数组当前的单元 mixed pos ( array array ) 本函数是 current() 的别名。,数组的应用 浏览数组元素,reset - 将数组的内部

18、指针指向第一个元素 mixed reset ( array array ) reset()将array的内部指针倒回到第一个元素并返回第一个数组元素的值。 end - 将数组的内部指针指向最后一个元素 mixed end ( array array ) end()将array的内部指针移动到最后一个元素,并返回该元素的值。,数组的应用 浏览数组元素,next - 将数组中的内部指针向前移动一位 mixed next ( array array ) 返回数组内部指针指向的下一个元素的值,或当没有更多元素时返回FALSE。 next()和current()的行为类似,只有一点区别,在返回值之前将内

19、部指针向前移动一位。这意味着它返回的是下一个数组元素的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组元素的末端,则 next() 返回FALSE。 警告如果数组包含空的元素,或者元素的值是0则本函数碰到这些元素也返回FALSE。要正确遍历可能含有空元素或者元素值为0的数组,参见each()函数。,数组的应用 浏览数组元素,prev - 将数组的内部指针倒回一位 mixed prev ( array array ) 返回数组内部指针指向的前一个元素的值,或当没有更多元素时返回FALSE。 如果数组包含空的元素,或者元素的值是0则本函数碰到这些元素也返回FALSE。要正确遍历可能含有

20、空元素或者元素值为0的数组,参见each()函数。 prev()和next()的行为类似,只除了它将内部指针倒回一位而不是前移一位。,数组的应用 数组排序,void sort ( array array , int sort_flags ) 本函数对数组进行排序。当本函数结束时数组元素将被从最低到最高重新安排。 可选的第二个参数sort_flags可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较元素 SORT_NUMERIC -元素被作为数字来比较 SORT_STRING -元素被作为字符串来比较,数组的应用 数组排序,asort - 对数组进行排序并保持索

21、引关系 void asort ( array array , int sort_flags ) 本函数对数组进行排序,数组的索引保持和元素的关联。主要用于对那些元素顺序很重要的关联数组进行排序。ksort - 对数组按照键名排序 int ksort ( array array , int sort_flags ) 对数组按照键名排序,保留键名到数据的关联。本函数主要用于关联数组。,数组的应用 数组排序,rsort - 对数组逆向排序 void rsort ( array array , int sort_flags ) 本函数对数组进行逆向排序(最高到最低)。 例_all_sort.php,数

22、组的应用 数组重新排序,shuffle - 将数组打乱 void shuffle ( array array ) 本函数打乱(随机排列元素的顺序)一个数组。必须用 srand() 播下本函数的随机数发生器种子。 array_reverse - 返回一个元素顺序相反的数组 array array_reverse ( array array , bool preserve_keys ) array_reverse() 接受数组 array 作为输入并返回一个元素为相反顺序的新数组,如果 preserve_keys 为 TRUE 则保留原来的键名。例_resort.php,数组的应用 range()

23、函数,range - 建立一个包含指定范围元素的数组 array range ( int low, int high , int step ) range()返回数组中从low到high的元素,包括它们本身。如果lowhigh,则序列将从high到low。 新参数: 可选的step参数是PHP5新加的。 如果给出了step的值,它将被作为元素之间的步进值。step应该为正值。如果未指定,step则默认为1。 例_range.php,数组的应用 统计数组元素,count - 统计变量中的元素数目 int count ( mixed var , int mode ) 返回 var 中的元素数目,通

24、常是一个 array(任何其它类型都只有一个元素)。 如果 var 不是数组类型,将返回 1(例外:count(NULL) 的结果是 0)。 注: 可选的 mode 参数自 PHP 4.2.0 起可用。 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有元素尤其有用。mode 的默认值是 0。 count() 对没有初始化的变量返回 0,但对于空的数组也会返回 0。用 isset() 来测试变量是否已经初始化。,数组的应用 统计数组元素,array_count_values - 统计数组中所有的值出现的次数 arr

25、ay array_count_values ( array input ) array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值。例_count.php,函 数,函数是自包含的独立的代码块。它可以完成某种具体的任务。一般情况下,这个任务需要多次的执行。 函数的执行过程: 从函数的程序接受一个参数 根据函数代码进行处理并得到预定的结果 返回结果,并把控制返回到调用它的程序,PHP函数的特性,无需在引用函数之前定义它。即可先调用后定义 如果已经声明了一个函数,不能再次定义或者取消定义。 PHP不支持函数的重载,

26、函数名惟一 PHP不允许函数支持参数个数可变 PHP函数支持默认参数PHP函数的3种类型: 内置函数 自定义函数 变量函数,函 数,内置函数 自定义函数 变量函数 函数变量的作用域,内置函数,PHP有很多标准的函数和结构。还有一些函数需要和特定地PHP扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。 调用 phpinfo() 或者 get_loaded_extensions() 可以得知PHP加载了那些扩展库。 以下介绍一些常用的函数:echo( ),print( ),include( ), require( ),内置函数- echo( ),用于输出一个或者多个字符

27、串 void echo ( string arg1 , string . ) 严格而言echo是一个语法结构,在调用该函数时,后面可以不使用括号将参数括起来例_echo.php,内置函数- print( ),输出一个字符串 int print ( string arg ) 该函数总是返回1。 严格而言print是一个语法结构,在调用该函数时,后面可以不使用括号将参数括起来例_print.php,内置函数- include( )和require( ),include(include_path) 语句包括并运行指定文件。 以下也适用于require()。这两种结构除了在如何处理失败之外完全一样。

28、include()产生一个警告,而require()则导致一个致命错误。即如果想在遇到丢失文件时停止处理页面就用require()。include()不是这样,程序会继续运行。同时也要确认设置了合适的 include_path。 当一个文件被包括时,其中所包含的代码继承了include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。 例_a_inc.php 例_b_inc.php,内置函数- include( )和require( ),当一个文件被包括时,语法解析器在目标文件的开头脱离PHP模式并进入HTML模式,到文件结尾处恢复。由于此原因,目标文件中

29、应被当作PHP代码执行的任何代码都必须被包括在有效的PHP起始和结束标记之中。 如果“URL fopen wrappers”在PHP中被激活(默认配置),可以用 URL(通过HTTP或者其它支持的封装协议 )而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为PHP代码解释,则可以用适用于 HTTP GET的URL请求字符串来向被包括的文件传递变量。严格的说这和包括一个文件并继承父文件的变量空间并不是一回事;该程序文件实际上已经在远程服务器上运行了,而本地程序则包括了其结果。,内置函数- include( )和require( ),如果include出现于调用文件中的一个函数里,则

30、被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。 例_c_inc.php函数内部包含文件include()和require()是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括号中)。 处理返回值:可以在被包括的文件中使用return()语句来终止该文件中程序的执行并返回调用它的程序。同样也可以从被包括的文件中返回值。可以像普通函数一样获得include呼叫的返回值。 例_d_inc.php 例_e_inc.php,内置函数- require( ),require() 语句包括并运行指定文件。 例_require.php 例_re

31、quire_1.php 注: 在PHP4.0.2之前适用以下规则:require()总是会尝试读取目标文件,即使它所在的行根本就不会执行。条件语句不会影响require()。不过如果require()所在的行没有执行,则目标文件中的代码也不会执行。同样,循环结构也不影响require()的行为。尽管目标文件中包含的代码仍然是循环的主体,但require()本身只会运行一次。,自定义函数,即用户自定义函数 声明函数格式: function func_name($arg1,$arg2,$argn) /函数代码coderetun 返回值; ,自定义函数,PHP不支持函数重载,也不支持取消定义或者重定

32、义已声明的函数。 函数名是大小写不敏感的,在调用函数时,通常使用其在定义时相同的形式。 PHP3虽然支持默认参数,但是却不支持可变的参数个数。PHP4起支持可变长度的参数。 例_func_1.php 无参数函数,函数的参数传递,PHP支持按值传递参数(默认),引用传递和默认值传递参数 值传递参数:主调程序调用时必须传递一个值 例_sum.php 引用传递:即地址传递,变量的地址为参数 例_valuechange.php 例_addresschange.php 默认值传递:在调用时有相应的参数,当没有要使用的值时,就把默认值传递给函数参数。 默认值必须是常量表达式,且必须放在非默认参数的右侧 例

33、_func_default.php,函数的返回值,值通过使用可选的返回语句返回。任何类型都可以返回,其中包括列表和对象。 这导致函数立即结束它的运行,并且将控制权传递回它被调用的行。 return()语句 例_func_back.php函数不能返回多个值,但为了获得简单的结果,可以返回一个列表。 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 &,自定义函数,任何有效的PHP代码都有可能出现在函数内部,甚至包括其它函数和类定义。 在PHP3中,函数必须在被调用之前定义。而PHP4则不再限制。如果一个函数以以下两个范例的方式有条件的定义,其定义必须在调用之前完成。 有

34、条件的函数 函数中的函数,例. 有条件的函数,例. 函数中的函数,变量函数,PHP支持变量函数的概念。这意味着如果一个变量名后有圆括号,PHP将寻找与变量的值相同的函数,并且将尝试执行它。除了别的事情以外,这个可以被用于实现回调函数,函数表等等。 变量函数不能用于语言结构,例如echo()、print()、unset()、isset()、empty()、include()、require() 以及类似的语句。需要使用自己的外壳函数来将这些结构用作变量函数。 例_func_var.php,函数变量的作用域,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局

35、部函数范围内。 PHP 中全局变量在函数中使用时必须申明为全局。 global和static可以实现从函数外部访问函数内部的变量,函数变量的作用域global语句,global语句允许从程序的任何位置问函数内部定义的变量以及从函数内部访问外部的变量 使用全局变量 global $var1,$varn; 例_global_1.php 使用$GLOBAL数组 例_global_2.php,函数变量的作用域static语句,静态变量仅在局部函数域中存在,当程序执行离开此作用域时,其值不丢失要写一个不会丢失本次计数值的计数函数,要将变量$a定义为静态的: ,本函数没什么用处,因为每次调用时都会将$a的

36、值设为0并输出“0“。$a+没有作用,因为一旦退出本函数则变量$a就不存在了。,现在,每次调用Test()函数都会输出$a的值并加一。,日期和时间处理,用日期和时间函数可以得到PHP所运行的服务器的日期和时间,可将日期和时间以很多不同方式格式化输出。 获取日期和时间 使用getdate函数获得日期信息 使用mktime函数获取日期时间戳,获取日期和时间time函数,time - 返回当前的 UNIX 时间戳 int time ( void ) 返回自从Unix新纪元(格林威治时间1970年1月1日00:00:00)到当前时间的秒数。,获取日期和时间date函数,date - 格式化一个本地时间

37、日期 string date ( string format , int timestamp ) 返回将整数timestamp按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。timestamp可选,默认值为time()。 有效的时间戳典型范围是格林威治时间1901年12 月13日20:45:54到2038年1月19日03:14:07。在 Windows 系统中此范围限制为从1970年1月1日到2038年1月19日。 要将字符串表达的时间转换成时间戳,应该使用 strtotime()。,date函数中format参数的设置,date函数中format参数的设置例_date

38、.php,使用getdate函数获得日期信息,getdate - 取得日期时间信息 array getdate ( int timestamp ) 返回一个根据timestamp得出的包含有日期信息的结合数组。如果没有给出时间戳则认为是当前本地时间。 ,使用mktime函数获取日期时间戳,mktime - 取得一个日期的 UNIX 时间戳 int mktime ( int hour , int minute , int second , int month , int day , int year , int is_dst ) 警告:注意参数的奇怪顺序,这和标准的 UNIX mktime()

39、调用中的参数顺序不同。 根据给出的参数返回 Unix 时间戳。时间戳是一个长整数,包含了从 Unix新纪元(1970年1月1日)到给定时间的秒数。 参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。 is_dst在夏令时可以被设为1,如果不是则设为0,或者不知道是否为夏令时的话设为 -1(默认值)。如果不知道,PHP会尝试自己判断。这可能会产生未预期(但不是错误)的结果。,使用mktime函数获取日期时间戳,mktime() 可以用来做日期计算和验证,对于超出范围的输入它可以自动计算出正确的值来。例如,下面的每一行都会输出字符串“Jan-01-1998”。 year可以是两

40、位或四位数字,取值从0-69表示2000-2069 以及70-99表示1970-1999(在如今很常见的time_t是32 位有符号整数的系统中,year的有效范围是1901到2038)。 Windows: 目前所有的Windows系统都不支持负的时间戳。因此合法的年份范围只包括从1970到2038。,使用mktime函数获取日期时间戳,给定月份的最后一天可以表达为下个月的第“0”天,而不是-1天。下面两个例子都将产生字符串“The last day in Feb 2000 is: 29”。 例. 每个月的最后一天年,月,日都等于零的日期被认为是非法的(否则会被当作 30.11.1999,这是很怪的行为)。,本章小结,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > PHP资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报