一、文件载入

  文件载入:将目标文件的代码载入到当前的位置上,有时候也叫流程控制。

  文件载入的目的是实现网站的分层设计,因为不同的页面可能有很多相同的区域(相同的代码),这些相同的代码只需要写一次,有需要的时候载入进来即可,提高代码的重用,提高效率。

  载入的文件不管是什么类型,实际上载入的是文件里面的代码,跟文件是什么类型无关。载入的代码,除了php代码可以执行,其他的脚本也可以执行。

  include、require、include-once、require-once

  include‘目标文件地址’  //相对于当前文件而言

  include-once在载入的时候会进行检查,如果文件载入过,就不再载入

  include与require对载入文件的依赖程度不同,include载入失败,产生一个warning级别的错误,后续的代码会继续执行;require载入失败,error,后续代码不再执行。

    载入原理:

  1、当执行到include的时候,先退出php模式,进入到html模式

  2、载入目标文件的源代码

  3、编译并执行

  4、再次进入PHP模式

二、载入路径

  相对路径:../  ./  /默认的是网站的根目录  前面不写(表示默认路径,可以在php配置文件php.ini中的include_path设置)

  绝对路径:不管当前文件在哪里打开,都能引入目标文件中的代码,缺点是可移植性差。

  为了提高绝对路径的文件的可移植性,我们可以:

    1、先定义跟目录常量,魔术常量

  由于linux操作系统下的目录分隔符只支持正斜杠/,为了兼容,要把上面的路径中的反斜杠变成正斜杠,这个时候,需要使用一个系统函数str_replace来替换:

  define(”ROOT_DIR”,str_replace(‘\\’ , ’/’, __DIR__) . ’/’);

    2、再定义其他目录常量

  define(”INC_DIR” , ROOT_DIR . ‘includes/’);

    3、加载文件

  include  INC_DIR . ‘文件名’;

三、终止脚本执行

  一般来说,函数内终止用exit,函数外用die

  测试代码时用的比较多:

    1、  检查错误,逐步排错

    2、  看中间代码的输出结果,提前终止脚本执行

    3、业务逻辑需要,比如,密码错误。连接失败等

  脚本延迟执行:sleep(秒数)

    sleep最常用在代码的测试阶段,利用sleep来查看当前中间代码以及执行效果

    sleep后面的秒数一般不会超过30秒,因为php默认的脚本周期就是30秒!php.ini中配置max_execution_time = 30

四、函数初步

  函数必须先声明再调用,但书写代码时可以先调用再声明,因为脚本在执行前会进行一次预编译,预编译后函数的定义代码已经放置在内存的用户代码区了。

  函数名遵守基本的标识符的命名规则,但函数名不区分大小写,一般用小驼峰法来表示!(注明:习惯上以后的类名用大驼峰法,因为类名也不区分大小写)。

  形式参数parameter、实际参数argument

    参数的传递默认是值传递,也可以引用传递,即在形参的前面加上求地址运算符&,这是实参传递给形参的是地址,实参此时必须是变量,变量才有引用传递。

    可以给形参赋值一个默认值

  不确定参数

    由于参数个数不确定,所以一个也不定义

    func_get_args( )      接收传递的所有实参,得到一个索引数组,通过下标来访问,从而对其进行运算

    count( )    得到数组元素的个数

    func_get_arg( )        获得某个参数的值,括号里面为该参数的下标

    func_num_args()     获得实参的个数

五、变量的作用域

  超全局变量、全局变量、局部变量

  1,  PHP中的全局和局部作用域是完全不重叠的,也就是相互之间不能访问!

  2,  每个函数也都有自己的局部作用域,函数之间的变量也无法互相访问!

  超全局变量:

    1、用户每定义一个全局变量,自动会在超全局变量数组中添加一个元素

    2、通过超全局变量的下标,可以在任意位置访问到其值$GLOBALS[‘key’]=$value,反之,增加$GLOBALS的元素,也可以创建一个超全局变量。

    此时,超全局变量与全局变量是“同生共死”的关系!删除、修改是同步的!

  global

    将全局变量的地址复制一份,生成了一个新的同名的局部变量(引用传递)

    删除global声明的变量,不影响全局变量。

    使用超全局变量$GLOBALS还是global,视情况而定,为避免对业务逻辑造成影响,尽量使用$GLOBALS("同生共死")

  静态局部变量static

    所谓的静态局部变量,是指该变量不会随着函数执行的结束而消失,而是,只要这个函数还在(在内存),该变量就一直存在!

    最大特点:每次调用该函数后,其中的静态局部变量都会被保存下来而不会消失(下次调用该函数的时候可以接着使用)!

    在循环语句中,静态局部变量static初始化只会执行一次,不会随着循环的进行而重新初始化!

六、递归调用和迭代思想

  (以后会拿出来单独详细分析)

  语法上,所谓的函数的递归调用,就是函数在执行的时候自动调用自己。一个最典型的:遍历目录!

  函数的递归有两个要素:

    1,  递归出口:就是什么时候停止自己调用自己

    2,  递归点:就是什么时候开始自己调用自己

  迭代就是从前往后来解决问题,体现在代码上,其实就是一个步骤的重复的执行,也就是循环结构。

PHP初步(中)的更多相关文章

  1. Link Cut Tree 总结

    Link-Cut-Tree Tags:数据结构 ##更好阅读体验:https://www.zybuluo.com/xzyxzy/note/1027479 一.概述 \(LCT\),动态树的一种,又可以 ...

  2. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  3. C#中对string与string[]的初步操作

    开篇之作,简单的对string与string[]进行初步操作,入门篇也,不多说,直接上代码. using System; using System.Collections.Generic; using ...

  4. iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行

    可以有两个办法让NSURLConnection在子线程中运行,即将NSURLConnection加入到run loop或者NSOperationQueue中去运行. 前面提到可以将NSTimer手动加 ...

  5. JavaScript 中的面向对象的初步认识

    我在学习JS的面向对象编程的时候,总是有两个奇怪的问题. 第一个就是:面向对象在JS中很少用到... 可能是目前自己做的项目还是比较简单,前端方面的任务我几乎都是用面向过程的方式写的,所以就导致,我啃 ...

  6. HBase写的初步测试中的表现

    底 第四年HBase.在上线的机HBase集群做一个初步的测试写入性能.下面具体说明做测试内容. 说明 HBase周围环境 0.96版本号,8台region server.默认配置 写数据说明 单co ...

  7. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  8. php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中

    php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中 1.phalcon框架的安装: phalcon框架在windows本地安装可以利用wamp软件,安装之后可以查看对应 ...

  9. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

随机推荐

  1. 28.zookeeper单机(Standalones模式)和集群搭建笔记

    zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...

  2. TFS二次开发系列:六、TFS的版本控制

    在TFS中对于版本控制是在WorkSpace工作区来控制的. 首先我们先整理WorkSpace的一些基本使用方法. CheckIn:迁入挂起的操作 CreateMapping:创建一个本地映射地址 D ...

  3. Failed to load resource: the server responded with a status of 500 (Internal Server Error)

    错误提示: 原因: MIME类型错误. 之前添加json.woff.woff2映射,更换系统(Win7升Win10)后配置失效,在webconfig中删除映射即可,因为Win10自带上面3个MIME映 ...

  4. 剑指offer六:反转链表

    输入一个链表,反转链表后,输出链表的所有元素 public class ListNode { int val; ListNode next = null; ListNode(int val) { th ...

  5. JVM 新生代老年代

    1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  6. 输入事件驱动---evdev_handler的大致实现流程(修整版)

    一.input输入子系统框架 下 图是input输入子系统框架,输入子系统由输入子系统核心层(input core),驱动层和事件处理层(Event Handler)三部分组成.一个输入事件,比如滑动 ...

  7. 【Java】Annotation_学习笔记

    Annotation 1.APT: 访问和处理Annotation的工具统称,即Annotation Process Tool. 2.java.lang下提供的五种基本Annotation: @Ove ...

  8. apache虚拟主机访问原理

    www.a.com www.b.org www.c.net 都放在10.0.0.10这个服务器上 那么客户访问这三个域名 服务器是怎么分辨访问的是哪个目录呢 GET http://download.m ...

  9. 后缀数组(suffix array)

    参考: Suffix array - Wiki 后缀数组(suffix array)详解 6.3   Suffix Arrays - 算法红宝书 Suffix Array 后缀数组 基本概念 应用:字 ...

  10. linux笔记:linux服务管理

    linux服务的分类: 启动和自启动: 查询已经安装的服务: RPM包的默认安装路径: 独立服务的启动: 独立服务的自启动: 基于xinetd的服务的管理: xinetd服务的自启动: 源码包安装服务 ...