读书篇:《细说PHP》三、PHP的语言结构

读书篇:《细说PHP》三、PHP的语言结构今天我们继续读 细说 PHP 第六章 本章主要讲两个部分 流程控制语句 函数 先来分析流程控制 书中如此描述 流程控制对于任何一门编程语言都至关重要 它提供了控制程序步骤的基本手段 是程序的核心部分 在任何一门程序设计语言中 都需要支持满足程序结构化所需的三种基本结构 顺序结构 主要是程序自上而下顺序执行 分支结构 可以叫条件结构 会在程序执行中按条件判断来改变程序执行的顺序 循环结构 重复执行程序的操作 我们一个一个来分析 顺序结构的语句主要就是赋值 输入 输出等就不多做介绍啦

今天我们继续读《细说PHP》,第六章,本章主要讲两个部分,流程控制语句,函数。

先来分析流程控制,书中如此描述:流程控制对于任何一门编程语言都至关重要,它提供了控制程序步骤的基本手段,是程序的核心部分。

在任何一门程序设计语言中,都需要支持满足程序结构化所需的三种基本结构:

  • 顺序结构:主要是程序自上而下顺序执行。
  • 分支结构:可以叫条件结构,会在程序执行中按条件判断来改变程序执行的顺序。
  • 循环结构:重复执行程序的操作。

我们一个一个来分析:

顺序结构的语句主要就是赋值、输入/输出等就不多做介绍啦。

分支结构(条件结构)它有几种形式:

  1. 单一条件分支结构:就是单独的if语句。
  2. 双向条件分支结构:if语句中包含else子句。
  3. 多项条件分支结构:在if和else组合中加入了elseif子句(switch也是多项条件分支结构)。
  4. 巢状条件分支结构:if 语句嵌套,就是在if和else语句块中又包含if语句。

循环结构:php提供了三种循环:

  1. while循环:条件型循环语句,根据判断条件多布尔值来进行循环控制。
  2. do-while循环:也是条件型循环语句,它和while区别在于,do-while至少会执行一次(这个php实际应用中很少)。
  3. for循环:计数型循环语句。

不得不提一下,while和for虽然是不同的循环语句,但他们可以做相同的事情,只不过在自己的领域里更加高效,这个我们在以后分析php内核机制时候会看到底层他们的处理方式。

下面我们重点来说一下for,因为for在php实际开发中使用很广泛。

for循环由三个表达式组成:

 for(初始化;表达条件式;增/减量){ #循环体 } 

不写花括号php也会识别到,但建议还是写上,代码规范一些

  • 初始化:第一次进入循环时,变量的初始赋值。
  • 条件表达式:判断条件是否结束循环。
  • 增/减量:执行完循环体之后根据控制循环变量的增减方式。

( for语句中的三个表达式,可以是一个多个或者是空的,具体可以自己写代码测试一下 )

php还有特殊的控制语句

  1. break终止循环,continue跳过循环他们是在循环体内使用。
  2. exit常被用于断点调试,作用是终止脚本执行。

php中这些流程控制语句不是彼此独立的,他们一般都是相互配合使用,互相嵌套,来完成实现程序的目的。

但随着业务的增加,编程量变大,程序结构重复性增多,这样造成了开发和维护成本,解决这个问题是将php设计成模块化结构,就是函数。

php本身就有很多内置函数,同时支持扩展,可以编写php扩展进行编译之后使用。

我们主要来说php自定义函数,也是实际开发中最为常用的。

php自定义函数都是独立的,它被用来执行特定的业务,同时具有重用性,可维护性,开发效率高。

函数使用function来声明,可以有0个或多个参数,也可以给参数赋初始化值。

 function 函数名(参数0,参数1......参数N,参数=赋值){ 
    #函数体 } 

函数的变量使用,有全局变量,局部变量,静态变量。

  • 全局变量:也称作外部变量,是定义在函数外部的,函数内部不能直接使用,需要用到global。
  • 局部变量:只作用于函数内部。
  • 静态变量:属于局部变量的一种,静态变量在函数使用后不被释放。

比较复杂的函数,递归

递归就是自己调用自己,在函数体内部直接或间接的调用自己

递归的作用通常被用来处理一些复杂的运算操作,例如,列表,动态树型菜,单遍历目录等。

递归的执行时会附加一个条件判断,判断是否需要执行递归,并在特定条件下终止,并返回上一层。

值得注意的是,使用递归如果诶呦条件判断可能会造成死循环。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231589.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HDLBits答案(12)_Verilog移位寄存器「建议收藏」

    HDLBits答案(12)_Verilog移位寄存器「建议收藏」Verilog移位寄存器HDLBits链接前言今天更新一节寄存器相关内容,其中涉及CRC校验的内容是用线性反馈移位寄存器搭建而成的。题库题目描述1:构建一个4bit的移位寄存器(右移),含异步复位、同步加载和使能areset:让寄存器复位为0load:加载4bit数据到移位寄存器中,不移位ena:使能右移q:移位寄存器中的内容Solution1:moduletop_module(inputclk,inputareset,//asyncacti

    2022年7月16日
    15
  • JVM性能调优

    JVM性能调优1、JVM调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟。程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpuload过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行…

    2022年6月11日
    34
  • 伽马校正和颜色空间

    伽马校正和颜色空间一、伽马校正所谓gamma校正,实际上是一个颜色的非线性曲线变换。下面来解释这个曲线存在的原因。1.1人眼的非线性视觉效应为什么要有gamma校正了。一言以蔽之,人眼的生理效应。如下图所示,第一行是人眼感受到的线性亮度变化,第二行是真实的非线性亮度变化。可以得出结论,首尾两端是一致的,但是中间值变化不一致;真实的中间亮度值必须更大,才能得到人眼感知的线性亮度变化。我们的目的是让人眼感受到线性的亮度变化曲线,因此输入亮度必须是第二行这种非线性的亮度变化曲线。第二行的亮度变化曲线,就是伽马校正曲线

    2022年9月24日
    2
  • stl库使用_餐厅库管年终总结个人总结

    stl库使用_餐厅库管年终总结个人总结1、STL库的含义STL(StandardTemplateLibrary),即标准模板库,是一个具有工业强度的,高效的C++程序库。2、STL的好处STL作为一种标准,便于交流,掌握它,一方面可以让你写的程序,易于让别人理解,另一方面你也能够比较容易地理解别人写的程序。3、STL的关键概念要使用STL,要了解以下几个基本概念:容器:可以把它理解为存放数据的地方,常用的一些容器有链表(list)栈(stack)动态数组(vector…

    2022年10月15日
    2
  • windows端口转发工具_android 端口转发

    windows端口转发工具_android 端口转发比如我们在host2机器上面部署了很多服务,但是由于某种原因导致我们无法直接ssh访问该服务器已经其上服务的对应端口,但是host3服务器,既能够访问host2服务器,又可以访问我们的host1服务器。这时,我们就可以通过设置ssh来进行服务的访问。但是还有两个问题:你需要保持终端开启防止SSH进程被关闭;由于网络故障/波动导致SSH终断时无法自动重连。前者可以使用tmux等第三方工具来解决,后者需要supervisor等第三方监控工具,不过我们还有一个更常用的选…

    2025年5月23日
    3
  • Windows套接字CAsyncSocket类的使用「建议收藏」

    Windows套接字CAsyncSocket类的使用「建议收藏」TCP编程的服务器端一般步骤是:1、创建一个CAsyncSocket或CSocket类或其子类对象A,用于监听客户端连接,然后通过Create函数设定端口号和协议类型为SOCK_STREAM。2、开启监听,用函数Listen();3、接收客户端上来的连接,用函数Accept(&B);并且把连接连接的对象存到B中,以便通信使用。4、当客户端发送来消息时,会触发OnReceive函数…

    2022年8月18日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号