函数和变量值类型_第1页
函数和变量值类型_第2页
函数和变量值类型_第3页
函数和变量值类型_第4页
函数和变量值类型_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、昨日回顾数据类型:字符串:定界符字符串heredoc语法:$str = <<<starttag字符串endtag;heredoc格式相当于使用双引号定义一个字符串nowdoc运算符:$str = <<<'starttag'endtag;nowdoc格式相当于使用单引号定义的一个字符串操作符位运算符:&按位与运算规则:两个操作数的二进制形式,对应(从右向左)位上的二进制位,如果都为1,则结果位是1,否则是0|按位或运算规则:两个操作数的二进制形式,对应(从右向左)位上的二进制位,如果都为0,则结果位是0,否则是1按位异或运算规则:两个操

2、作数的二进制形式,对应(从右向左)位上的二进制位,如果不同,则结果位是1,否则是0按位非单目运算符运算规则:对操作数的二进制形式,进行取反(包含符号位),如果正数,按位非是一个负数示例:<<算术左移运算规则:对操作数的二进制形式,除符号位,其余位整体左移,左边溢出位忽略,右边空位补0最终的规律:每移一位,将原数扩大一位(计算机内最快的将一个数变为倍数的方法)>>算术右移运算规则:对操作数的二进制形式,除符号位,其余位整体右移,右边溢出位忽略,左边空位补符号位注意:无论算术左移还是算术右移,都会保持符号位不变流程控制:分支结构、ifswitch循环结构forforeach

3、whiledo.while循环结束与退出break【n】continue【n】替代语法为什么会有替代语法:php是嵌入在html文档中的脚本语言,Php可以动态生成html标签,但是php主要功能并不是生成html标签,主要用于动态的生成数据(数据库中的数据)。如果使用php来动态生成html标签及标签内部数据时,程序代码会显的很乱。就是php中的流程控制的另一类写法。哪些流程控制可以有替代语法if、switch、for、foreach、while替代语法的形式:使用冒号':'代替左花括号'',使用endif、endsiwtch、endfor、endforeac

4、h、endwhle代替右花括号''在PHP中一个流程控制结构可以书写在不同的标签内各种流程控制替代语法:<?php if():?> <?php endif;?><?php switch():?><?php endswitch;?><?php for():?><?php endfor;?><?php foreach():?><?php endforeach;?><?php while():?><?php endwhile;?>示例1:示例2:PHP执行过程任何一

5、种语言的源代码计算机都没有办法直接执行,需要转换成计算机能够识别的机器指令。PHP也是一门高级语言,也需编译(解释)PHP的解析过程:1、请求源代码,进行词法解析,语法解析。词法解析,主要对源代码中的单词进行一个个的读入,判断,词法解析时,如果有错误,会报错。编译错误。语法解析,主要判断语法结构是否正确。比如:流程控制结构是否完成。结果:是可执行的机器代码2、执行,执行时主要是对内存的操作,执行时也可能会出现错误,此时错误属性执行错误。结果:纯的html代码。图解:php嵌入html的解析过程示例:执行过程:首先明确:PHP是分段读取一次执行(编译),JS是分段读取分段执行程序就是对内存的操作

6、函数可以先调用后定义,原因,程序的执行时需要先编译,对程序的编译的结果在内存有影响(编译之后,函数在内存中就产生了可执行的代)。开始执行函数时,就可以找到函数的代码进行执行。变量不可以先访问后定义,原因,程序在执行时需要行编译,但对变量的编译对内存不会有任何的影响。函数基本知识:函数:概念就是完成完成某一功能的代码段。从代码结构上看就是使用将一段功能性的代码括起来,并使用function关键为这段代码起一个名子,就是封装。在名子后加'()',此函数的作用指示此名子,只能调用。函数是模块化编程思想的产生。在函数的基础上再进行封装就是面向对象的编程思想。函数的作用:减少代码冗余,达

7、到一次定义多次调用。示例:函数的组成元素函数名、形参、实参函数的定义:function funName(形参列表)/函数体【return 值】;说明:funName就是一个函数名(标识符),命令规则,只能包含字母、数字、下划线,不能以数字开头。命名方式,小驼峰,如果函数名,由多个单词组成,除第一个单外,以后的每个单字母大写,三个单词以上使用缩写。函数的调用:funName(实参列表);函数的参数与函数相关的参数有形参、实参形参:函数定义时的参数就称之为形参作用:用于向函数内部传递数据。形参可以让函数更改具有通用性。特点:形参就是一个变量,只在函数内部有效,对函数外部不可见实参:函数调用时的参数

8、称之为实参,实参可以变量,可以是字面值。作用:用于从函数外部向函数内部传递数据形参与实参的区别:实参是主动向函数内部数据,形参是被接收数据示例:形参的默认值php中函数的形参可以赋值,赋的值就是形参的默认值当函数调用时没有为形参传递数据,那么函数内部使用形参的默认值当函数调用时有没形参传递数据,那么函数内部使用实参的数据。形参可让函数更加具有通用性。具有默认值的形参的使用,一般习惯上将具有默认值的形参放在形参列表最后。php中实参的个数,不能少于不具有默认值的形参的个数。实参的个数比形参的个数多,那么多个实参会被忽略。形参与实参内存分析源代码:<?phpshowInfo('hel

9、lo phper');function showInfo($mes)echo $mes;$v1 = 'php15'showInfo($v1);?>执行过程:1、编译,加载源代码,词法检查,语法检查(可执行机器代码) 2、执行函数的调用,检查看内存中有没函数存在,存在。 2.1、开启执行函数,查看是否形参,有没有?没有默认,找实参(字面值) 2.2、在栈区再开辟一个专属于当前函数的内存空间 2.3、在函数专属的空间内,开启一个空间用于$mes变量名 2.4、执行ehco $mes,在函数专属空间内使用$mes变量存储的内存地址到,数据段的全局区找到相应当,并输出到缓

10、存区。 2.5、第一次调用结束时,位于栈区的专用于第一次调用时开辟的内存空间的数据,会全部清空。 3、执行$v1 = 'php15'3.1、直接在栈区开辟一个空间用于存储$v13.2、在数据段的全局区开辟一个空间用于存储'php15'3.3、将存储php15物理地址,传给$v1 4、执行函数第2次调用showInfo($v1)4.1、检查函数是否有形参,有形参且,调用时也传递了实参$v14.2、在栈区再开辟一个专属于当前函数的内存空间 4.3、在函数专属的空间内,开启一个空间用于存储$mes变量 4.4、实参与形参传递默认是值的传递,相当于$mess = $v1

11、,将$v1存储的地址指向的数据,存储,$mess存储的地址指向的空间。 4.5、将全局区为$mess变量开辟的存储数据的空间的地址传递给栈区中的$mess变量 4.6、执行ehco $mes,在函数专属空间内使用$mes变量存储的内存地址到,数据段的全局区找到相应当,并输出到缓存区。 4.7、第一次调用结束时,位于栈区的专用于第一次调用时开辟的内存空间的数据,会全部清空。 5、脚本执行结束栈区,与代码段清空,数据段中没有被指向的数据全部被操作系统 回收。 图解:函数的返回值函数用于完成一功能,在完成功能的同时在函数内部会产生数据,数据可能会在函数执行结束后,被其后的代码所使用。由于函数在执行结

12、束后,所有的数据都被清空(函数内部无法保存数据),需要将函数产生的数据返回给函数的调用处语法:return 值;说明:return并不是必须的,是根据需求而定。一个函数内可以有多个return,当函数在执行时,遇到任何一个return都会直接结束函数体。示例1:示例2:函数体:完成某一功能的代码段。静态变量在函数体内使用static定义的变量语法:static $vName =值;说明:l 静态变量在函数调用时只会被初始化一次。l 静态变量不会随函数调用与结束,而消失,但是在函数外部无访问。l 每次在函数调用时,仍然保留着上次函数运行时的值,而且可以使用l 静态变量的值只能是简单的值,不能是一

13、个式子l 当我们想在函数多次调用时,每次还有使用上一次函数调用时候的值,那么可以考虑使用静态变量。静态变量的内存原理源代码:<?phpfunction funTest()static $v1 = 100;$v2 = 100;$v1 +;$v2 +;echo "<font color='red'>".$v1.'</font><br/>'echo $v2.'<hr/>'funTest();funTest();?>原理描述:1、编译,加载源代码,词法检查,语法检查(可执行机

14、器代码) 1.1、在编译时发现函数内用static关键字,那就会在静态区开辟一个空间用于存储数据1002、执行函数调用 2.1、检查是否有形参存在(没有), 2.2、在栈区开辟一个空间用于存储函数的执行(为函数开辟的专属的空间)2.3、在栈区开辟一个空间用于存储$v1,由于是staitc声明的,把会在静态区存储100数据的物理地址,传递栈区$v13、$v2 = 100;3.1、会在栈区专属于函数空间内开辟一个空间存储$v2, 3.2、在全局区开辟一个空间用于存储100数据, 3.3、将全局区存储100数据的物理地址赋值给$v2。 4、执行$v1+4.1、根据栈区中$v1的内存地,找到静态区中的内存空间,并将数据加15、执行$v2+5.1、根据栈区中$v1的内存地,找到静态区中的内存空间,并将数据加16、执行echo $v1与echo $v27、函数调用结束: 8、第二次调用 8.1、static $v1 = 100在编译时已被执行,在函数调用时不会再执行初始化,但仍然在函数专的内存区域,开辟空间存储$v18.2、将静态区中的101的物理地址,传递栈区中的$v19、执行$v2 = 100,(步骤如:3.1 3.2 3.3)10、执行$v1+ 10.1

温馨提示

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

评论

0/150

提交评论