每天5分钟,细读PHP手册-8

版权声明:欢迎转载,请附上原文链接 https://blog.csdn.net/hfut_wowo/article/details/88963063

include

查找顺序:

  • 被包含文件先按参数给出的路径寻找;
  • 如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找;
  • 如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找;
  • 如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误;
  • 如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 … 开头)——include_path 都会被完全忽略。例如一个文件以 …/ 开头,则解析器会在当前目录的父目录下寻找该文件;

include语法:

  • 当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中需要作为 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中;
  • 如果在包含文件中定义有函数,这些函数不管是在 return 之前还是之后定义的,都可以独立在主文件中使用。如果文件被包含两次,PHP 5 发出致命错误因为函数已经被定义,但是 PHP 4 不会对在 return 之后定义的函数报错。推荐使用 include_once 而不是检查文件是否已包含并在包含文件中有条件返回;
  • PHP 文件"包含"到一个变量中的方法是用输出控制函数结合 include 来捕获其输出;

用户自定义函数

  • 任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义;
  • 函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。可以用正则表达式表示为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*;
  • 函数无需在调用之前被定义,除非是下面两种情况:1、当一个函数是有条件被定义时,必须在调用函数之前定义;2、函数中定义的函数,必须在外围函数调用之后,内部的函数才可以被调用;
  • PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然;
  • PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数;
  • 函数名是大小写无关的,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯;

函数参数

  • 参数是从左向右求值的;
  • PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表;
  • 类型声明允许函数在调用时要求参数为特定类型。 如果给出的值类型不对,那么将会产生一个错误: 在PHP 5中,这将是一个可恢复的致命错误,而在PHP 7中将会抛出一个TypeError异常;

函数返回值

php7增加了返回值的类型声明。

可变函数

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

匿名函数

  • 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值;
  • 匿名函数目前是通过 Closure 类来实现的;
  • 闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号;
  • 闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名;

猜你喜欢

转载自blog.csdn.net/hfut_wowo/article/details/88963063