PHP程序设计02-2.ppt_第1页
PHP程序设计02-2.ppt_第2页
PHP程序设计02-2.ppt_第3页
PHP程序设计02-2.ppt_第4页
PHP程序设计02-2.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章PHP语言基础-2,主讲:田旭Email:tianxu,PHP程序设计,第2章PHP语言基础-2,PHP语法概述PHP变量PHP运算符表达式控制语句数组函数日期和时间处理,数组,PHP中的数组实际上是一个有序图。图是一种把values映射到keys的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表,字典,集合,栈,队列以及更多可能性。,数组,数组初始化数组类型枚举数组关联数组多维数组数组的应用。,数组初始化-使用数组标识符,数组标识符是一组内空的方括号。用方括号的语法新建/修改,通过在方括号内指定键名来给数组赋值,也可省略键名。其语法如下:$arrkey=value;$student=value;其中key可以是integer或string,value可以是任何值如数组不存在,将新建一个一般情况下,下标从0开始按顺序分配给数组。也可以随机分配。,数组初始化,注:如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值+1。如果当前还没有整数索引,则键名将为0。如果制定的键名已经有值了,该值将被覆盖。自PHP4.3.0起,上述的索引生成方法改变了。如果给一个当前最大键名是负值的数组添加一个新值,则新生成的的索引将为零(0)。以前新生成的索引为当前最大索引加一,和正值的索引相同。注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下例子说明了:,数组初始化,$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=33=44=5)Array()Array(5=6)Array(0=61=7),数组初始化-使用array()函数,用array()可新建一个array。它接受一定数量用逗号分隔的key=value参数对。如:array(key=value,.)/key可以是integer或者string,value可以是任何值举例$arr=array(foo=bar,12=true);echo$arrfoo;/barecho$arr12;/1,数组类型,枚举数组下标为整数的数组称为枚举数组或数字索引数组数组索引号默认从0开始,依次增加关联数组下标为字符串的数组称为关联数组或字符串索引数组使用TRUE作为键名将使integer1成为键名。使用FALSE作为键名将使integer0成为键名。使用NULL作为键名将等同于使用空字符串。使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样。不能用数组和对象作为键名。这样做会导致一个警告:illegaloffsettype。,数组类型,多维数组array(6=5,13=9,a=42);echo$arrsomearray6;/5echo$arrsomearray13;/9echo$arrsomearraya;/42?,数组的应用unset()函数,unset()函数删除数组元素,释放给定的变量voidunset(mixedvar,mixedvar,.)在PHP3中,unset()返回TRUE(整型值1),而在PHP4中,unset()不再是一个真正的函数:而是一个语句,没有返回值。试图获取unset()的返回值将导致解析错误。unset()在函数中的行为会依赖于想要销毁的变量的类型而有所不同。例_array_1.php,数组的应用foreach函数,PHP4包括了foreach结构,是一种遍历数组简便方法。仅能用于数组。有两种语法,第二种比较次要但却是第一种的有用的扩展。foreach(array_expas$value)statementforeach(array_expas$key=$value)statement第一种格式遍历给定的array_exp数组。每次循环中,当前元素的值被赋给$value并且数组内部的指针向前移一步(下次循环中将会得到下一个元素)。第二种格式做同样的事,同时当前元素的键值也会在每次循环中被赋给变量$key。,数组的应用foreach函数,注:当foreach开始执行时,数组内部的指针会自动指向第一个元素。不需要在foreach循环之前调用reset()。foreach操作的是指定数组的一个拷贝,而不是该数组本身。即使有each()的构造,原数组指针也没有变,数组元素的值也不受影响。foreach不支持用“”来禁止错误信息。例_foreach.php,数组的应用转换为数组,对于任何的类型:整型、浮点、字符串、布尔和资源,如果将一个值转换为数组,将得到一个仅有一个元素的数组(其下标为0),该元素即为此标量的值。如果将一个对象转换成一个数组,所得到的数组的元素为该对象的属性(成员变量),其键名为成员变量名。如果将一个NULL值转换成数组,将得到一个空数组。,数组的应用each函数,arrayeach(array$array)返回array数组中当前指针位置的键值对并向前移动数组指针。键值对被返回为四个元素的数组,键名为0,1,key和value。元素0和key包含有数组元素的键名,1和value包含有数据。如果内部指针越过了数组的末端,则each()返回FALSE。例例_each.php,运行结果:Array1=bobvalue=bob0=0key=0,数组的应用list()语句,voidlist(mixed.)list()不是真正的函数,而是语言结构。用一步操作给一组变量进行赋值。list()仅能用于数字索引的数组并假定数字索引从0开始。each()经常和list()结合使用来遍历数组在执行each()之后,数组指针将停留在数组中的下一个元素或者当碰到数组结尾时停留在最后一个元素。如果要再用each遍历数组,必须使用reset()。例_list.php,数组的应用list()语句,list()从最右边一个参数开始赋值。当我们用了具有索引的数组时,通常期望得到的结果和在list()中写的一样是从左到右的,但实际上是以相反顺序赋值的。而用单纯的变量则没有问题。例产生如右输出(注意元素顺序和list()中所写的顺序的比较):,array(3)2=string(8)caffeine“1=string(5)brown“0=string(6)coffee“,数组的应用array_slice()函数,arrayarray_slice(arrayarray,intoffset,intlength)array_slice()返回根据offset和length参数所指定的array数组中的一段序列。如果offset为正,则序列将从array中的此偏移量开始。如果offset为负,则序列将从array中距离末端这么远的地方开始。如果给出了length并且为正,则序列中将具有这么多的元素。如果给出了length并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset开始一直到array的末端。注意array_slice()将忽略键名,并且是根据元素在数组中的实际位置来计算偏移量和长度的。例_array_slice.php,数组的应用array_shift()函数,mixedarray_shift(arrayarray)array_shift()将array的第一个元素移出并作为结果返回,将array的长度减一并将所有其它元素向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果array为空(或者不是数组),则返回NULL。注:使用本函数后会重置(reset())数组指针。,数组的应用array_pop()函数,mixedarray_pop(arrayarray)array_pop()弹出并返回array数组的最后一个元素,并将数组array的长度减一。如果array为空(或者不是数组)将返回NULL。注:使用本函数后会重置(reset())数组指针。,数组的应用array_unshift()和array_push(),intarray_unshift(arrayarray,mixedvar,mixed.)array_unshift()将传入的元素插入到array数组的开头。元素是作为整体被插入的,因此传入元素将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。返回array数组新的元素数目。intarray_push(arrayarray,mixedvar,mixed.)array_push()将array当成一个栈,并将传入的变量压入array的末尾。array的长度将增加入栈变量的数目。,数组的应用array_splice()函数,array_splice-把数组中的一部分去掉并用其它值取代arrayarray_splice(arrayinput,intoffset,intlength,arrayreplacement)array_splice()把input数组中由offset和length指定的元素去掉,如果提供了replacement参数,则用replacement数组中的元素取代。返回一个包含有被删除元素的数组。如果offset为正,则从input数组中该值指定的偏移量开始删除。如果offset为负,则从input末尾倒数该值指定的偏移量开始删除。如果省略length,则删除数组中从offset到结尾的所有部分。如果指定了length并且为正值,则删除这么多单元。如果指定了length并且为负值,则删除从offset到数组末尾倒数length为止中间所有的元素。小窍门:当给出了replacement时要删除从offset数组末尾所有元素时,用count($input)作为length。如果给出了replacement数组,则被删除的元素被此数组中的元素替代。如果offset和length的组合结果是不会删除任何值,则replacement数组中的元素将被插入到offset指定的位置。小窍门:如果用来替换的值只是一个元素,那么不需要给它加上array(),除非该元素本身就是一个数组。,数组的应用array_splice()函数,以下的表达式具有同样效果:返回一个包含被删除元素的数组。,数组的应用浏览数组元素,current-返回数组中的当前元素mixedcurrent(arrayarray)每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个元素。current()数返回当前被内部指针指向的数组元素的值,并不移动指针。如果内部指针指向超出了元素列表的末端,current()返回FALSE。警告如果数组包含有空的元素(0或者“”,空字符串)则本函数在碰到这个元素时也返回FALSE。这使得用current()不可能判断是否到了此数组列表的末端。要正确遍历可能含有空元素的数组,用each()函数。pos-得到数组当前的单元mixedpos(arrayarray)本函数是current()的别名。,数组的应用浏览数组元素,reset-将数组的内部指针指向第一个元素mixedreset(arrayarray)reset()将array的内部指针倒回到第一个元素并返回第一个数组元素的值。end-将数组的内部指针指向最后一个元素mixedend(arrayarray)end()将array的内部指针移动到最后一个元素,并返回该元素的值。,数组的应用浏览数组元素,next-将数组中的内部指针向前移动一位mixednext(arrayarray)返回数组内部指针指向的下一个元素的值,或当没有更多元素时返回FALSE。next()和current()的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组元素的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组元素的末端,则next()返回FALSE。警告如果数组包含空的元素,或者元素的值是0则本函数碰到这些元素也返回FALSE。要正确遍历可能含有空元素或者元素值为0的数组,参见each()函数。,数组的应用浏览数组元素,prev-将数组的内部指针倒回一位mixedprev(arrayarray)返回数组内部指针指向的前一个元素的值,或当没有更多元素时返回FALSE。如果数组包含空的元素,或者元素的值是0则本函数碰到这些元素也返回FALSE。要正确遍历可能含有空元素或者元素值为0的数组,参见each()函数。prev()和next()的行为类似,只除了它将内部指针倒回一位而不是前移一位。,数组的应用数组排序,voidsort(arrayarray,intsort_flags)本函数对数组进行排序。当本函数结束时数组元素将被从最低到最高重新安排。可选的第二个参数sort_flags可以用以下值改变排序的行为:排序类型标记:SORT_REGULAR-正常比较元素SORT_NUMERIC-元素被作为数字来比较SORT_STRING-元素被作为字符串来比较,数组的应用数组排序,asort-对数组进行排序并保持索引关系voidasort(arrayarray,intsort_flags)本函数对数组进行排序,数组的索引保持和元素的关联。主要用于对那些元素顺序很重要的关联数组进行排序。ksort-对数组按照键名排序intksort(arrayarray,intsort_flags)对数组按照键名排序,保留键名到数据的关联。本函数主要用于关联数组。,数组的应用数组排序,rsort-对数组逆向排序voidrsort(arrayarray,intsort_flags)本函数对数组进行逆向排序(最高到最低)。例_all_sort.php,数组的应用数组重新排序,shuffle-将数组打乱voidshuffle(arrayarray)本函数打乱(随机排列元素的顺序)一个数组。必须用srand()播下本函数的随机数发生器种子。array_reverse-返回一个元素顺序相反的数组arrayarray_reverse(arrayarray,boolpreserve_keys)array_reverse()接受数组array作为输入并返回一个元素为相反顺序的新数组,如果preserve_keys为TRUE则保留原来的键名。例_resort.php,数组的应用range()函数,range-建立一个包含指定范围元素的数组arrayrange(intlow,inthigh,intstep)range()返回数组中从low到high的元素,包括它们本身。如果lowhigh,则序列将从high到low。新参数:可选的step参数是PHP5新加的。如果给出了step的值,它将被作为元素之间的步进值。step应该为正值。如果未指定,step则默认为1。例_range.php,数组的应用统计数组元素,count-统计变量中的元素数目intcount(mixedvar,intmode)返回var中的元素数目,通常是一个array(任何其它类型都只有一个元素)。如果var不是数组类型,将返回1(例外:count(NULL)的结果是0)。注:可选的mode参数自PHP4.2.0起可用。如果可选的mode参数设为COUNT_RECURSIVE(或1),count()将递归地对数组计数。对计算多维数组的所有元素尤其有用。mode的默认值是0。count()对没有初始化的变量返回0,但对于空的数组也会返回0。用isset()来测试变量是否已经初始化。,数组的应用统计数组元素,array_count_values-统计数组中所有的值出现的次数arrayarray_count_values(arrayinput)array_count_values()返回一个数组,该数组用input数组中的值作为键名,该值在input数组中出现的次数作为值。例_count.php,函数,函数是自包含的独立的代码块。它可以完成某种具体的任务。一般情况下,这个任务需要多次的执行。函数的执行过程:从函数的程序接受一个参数根据函数代码进行处理并得到预定的结果返回结果,并把控制返回到调用它的程序,PHP函数的特性,无需在引用函数之前定义它。即可先调用后定义如果已经声明了一个函数,不能再次定义或者取消定义。PHP不支持函数的重载,函数名惟一PHP不允许函数支持参数个数可变PHP函数支持默认参数PHP函数的3种类型:内置函数自定义函数变量函数,函数,内置函数自定义函数变量函数函数变量的作用域,内置函数,PHP有很多标准的函数和结构。还有一些函数需要和特定地PHP扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。调用phpinfo()或者get_loaded_extensions()可以得知PHP加载了那些扩展库。以下介绍一些常用的函数:echo(),print(),include(),require(),内置函数-echo(),用于输出一个或者多个字符串voidecho(stringarg1,string.)严格而言echo是一个语法结构,在调用该函数时,后面可以不使用括号将参数括起来例_echo.php,内置函数-print(),输出一个字符串intprint(stringarg)该函数总是返回1。严格而言print是一个语法结构,在调用该函数时,后面可以不使用括号将参数括起来例_print.php,内置函数-include()和require(),include(include_path)语句包括并运行指定文件。以下也适用于require()。这两种结构除了在如何处理失败之外完全一样。include()产生一个警告,而require()则导致一个致命错误。即如果想在遇到丢失文件时停止处理页面就用require()。include()不是这样,程序会继续运行。同时也要确认设置了合适的include_path。当一个文件被包括时,其中所包含的代码继承了include所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。例_a_inc.php例_b_inc.php,内置函数-include()和require(),当一个文件被包括时,语法解析器在目标文件的开头脱离PHP模式并进入HTML模式,到文件结尾处恢复。由于此原因,目标文件中应被当作PHP代码执行的任何代码都必须被包括在有效的PHP起始和结束标记之中。如果“URLfopenwrappers”在PHP中被激活(默认配置),可以用URL(通过HTTP或者其它支持的封装协议)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为PHP代码解释,则可以用适用于HTTPGET的URL请求字符串来向被包括的文件传递变量。严格的说这和包括一个文件并继承父文件的变量空间并不是一回事;该程序文件实际上已经在远程服务器上运行了,而本地程序则包括了其结果。,内置函数-include()和require(),如果include出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。例_c_inc.php函数内部包含文件include()和require()是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括号中)。处理返回值:可以在被包括的文件中使用return()语句来终止该文件中程序的执行并返回调用它的程序。同样也可以从被包括的文件中返回值。可以像普通函数一样获得include呼叫的返回值。例_d_inc.php例_e_inc.php,内置函数-require(),require()语句包括并运行指定文件。例_require.php例_require_1.php注:在PHP4.0.2之前适用以下规则:require()总是会尝试读取目标文件,即使它所在的行根本就不会执行。条件语句不会影响require()。不过如果require()所在的行没有执行,则目标文件中的代码也不会执行。同样,循环结构也不影响require()的行为。尽管目标文件中包含的代码仍然是循环的主体,但require()本身只会运行一次。,自定义函数,即用户自定义函数声明函数格式:functionfunc_name($arg1,$arg2,$argn)/函数代码coderetun返回值;,自定义函数,PHP不支持函数重载,也不支持取消定义或者重定义已声明的函数。函数名是大小写不敏感的,在调用函数时,通常使用其在定义时相同的形式。PHP3虽然支持默认参数,但是却不支持可变的参数个数。PHP4起支持可变长度的参数。例_func_1.php无参数函数,函数的参数传递,PHP支持按值传递参数(默认),引用传递和默认值传递参数值传递参数:主调程序调用时必须传递一个值例_sum.php引用传递:即地址传递,变量的地址为参数例_valuechange.php例_addresschange.php默认值传递:在调用时有相应的参数,当没有要使用的值时,就把默认值传递给函数参数。默认值必须是常量表达式,且必须放在非默认参数的右侧例_func_default.php,函数的返回值,值通过使用可选的返回语句返回。任何类型都可以返回,其中包括列表和对象。这导致函数立即结束它的运行,并且将控制权传递回它被调用的行。return()语句例_func_back.php函数不能返回多个值,但为了获得简单的结果,可以返回一个列表。从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符例_global_1.php使用$GLOBAL数组例_global_2.php,函数变量的作用域static语句,静态变量仅在局部函数域中存在,当程序执行离开此作用域时,其值不丢失要写一个不会丢失本次计数值的计数函数,要将变量$a定义为静态的:,本函数没什么用处,因为每次调用时都会将$a的值设为0并输出0。$a+没有作用,因为一旦退出本函数则变量$a就不存在了。,现在,每次调用Test()函数都会输出$a的值并加一。,日期和时间处理,用日期和时间函数可以得到PHP所运行的服务器的日期和时间,可将日期和时间以很多不同方式格式化输出。获取日期和时间使用getdate函数获得日期信息使用mktime函数获取日期时间戳,获取日期和时间time函数,time-返回当前的UNIX时间戳inttime(void)返回自从Unix新纪元(格林威治时间1970年1月1日00:00:00)到当前时间的秒数。,获取日期和时间date函数,date-格式化一个本地时间日期stringdate(stringformat,inttimestamp)返回将整数timestamp按照给定的格式字串而产生的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论