PHP进阶之路 -- PHP基础语法php
1、windows环境下php环境 html
搭建环境对于每一个开发者来讲,是必需要掌握的技能,可是对于刚刚接触开发没多久的同窗来讲,彻底没有必要把大把的时间花费在搭建环境的身上,想要学习搭建环境,彻底能够等到后期再来研究,在学习的初期,彻底能够怎么方便怎么快就怎么来。mysql
在windows中,能够选择单独安装环境,也能够选择安装集成环境。web
可是有意思的是,咱们若是单独的下载php环境须要的文件,会发现任何一个文件都超过百M,可是若是咱们安装集成环境,你会发现集成环境的大小都要远远小于独立下载的文件。而出现这种状况的缘由是由于独立的文件里面包含了软件的所有服务,而咱们单独下载的集成环境则省略了不少内容,因此才致使文件大小不一样。sql
那么对于刚刚入行的学员来讲,采用集成环境可以减小配置繁琐环境的时间以及没必要要的麻烦。shell
目前国内比较好用的集成环境有不少,例如,wampserver ,phpstudy等等.在本次授课中,推荐使用phpstudy这款集成环境,中文界面,能够调整多个版本的php等等。编程
在安装完成以后须要对系统的环境变量进行配置,将php目录路径和mysql目录路径写入到环境变量当中,从而保证开发中的使用。windows
2、php定界符 后端
php能作不少事,可是目前来说,更多的是进行web开发,因此说php会常常和html打交道,而php是能够放在html代码的任何位置,以<? 开始,以?>结束。可是须要注意的是,php和html代码结合 存储代码的文件后缀必须是.php。数组
1 文件后缀必须是.php 2 <!doctype html> 3 <html> 4 <body> 5 <h1><?php echo "hello,world" ?></h1> 6 </body> 7 </html>
3、php变量
在不少的语言中,变量都是相当重要的一项。
变量主要存储数据,从而方便开发者们的逻辑业务处理。
php程序中声明一个变量使用$这个美圆符号来表示,例如$a,就是采用美圆符号加变量名组合的形式来声明变量。变量一旦声明以后会被存储在内存中,直到脚本结束自动销毁或者人为销毁。
声明一个变量一般状况下须要遵循一些规则,例如:
一般状况下,咱们使用变量是为了存储数据,而变量自己并无意义。
php自己是一门弱类型语言,因此,咱们在给变量进行赋值的时候,变量的类型会随着值得变化而变化。
例如:
$a = “hello”; // string
$a = array(); // array
咱们在程序开发的时候,一般须要预留变量,简单的说就是咱们可能预料到在后期会用到一个变量用作存储数据,那么咱们就能够提早声明变量,可是变量暂时并不须要值,这个时候咱们就能够给变量赋值为null。
变量做用域
做用域的意思是说变量的生效范围,在php中存在四个范围:local(局部做用域)、global(全局做用域)、static(静态)、parameter(参数)。
首先来讲一下全局做用域和局部做用域:
在一个php文件中,若是在函数外面声明的变量,就是全局变量,做用域范围为全局;而在函数内部声明的变量就是局部变量,做用域仅限于函数内部。
那么做用域范围对php有什么影响吗?
有的,例如,局部变量只能在函数内部使用,在函数外部将没法使用,那么没法使用的缘由是由于当函数执行完毕以后这个变量就已经被销毁了。
再说全局变量,全局变量能够在函数中使用,可是必须经过global关键字来使用,不然系统会抛出错误提示。
而static则表示静态变量。可以让变量中止销毁。
上面的代码输出结果为 2 , 2。若是此时$a 变为static:
那么输出结果为2 , 3 。
缘由是static 变量可以让变量即便在函数被销毁的状况下也能得以保存。
最后说一下函数的参数,函数的参数由于函数的限制,因此只可以在函数内部使用,因此说函数参数的做用域也仅仅停留在函数当中,至关于局部变量。
4、数据类型
数据是一个项目或者说一个网站的核心,而先后端的通讯说白了就是对数据操做。而对于不一样的开发语言来讲,为了实现本身某些特性,都会在基础的数据类型上进行更改,可是从宏观来看,其实不少语言的数据类型都是很类似的。
在php中,存在的数据类型以下:
上面的8种数据类型种,复合类型有array 和 object ,两种特殊类型为resource 和 null。
数据类型简单介绍
字符串类型:
字符串类型是比较常见的类型,建立一个字符串主要经过单引号或者双引号来进行建立,虽然两者都是用来建立字符串类型,可是仍是有必定的细微的区别。
经过单引号建立的字符串,是不能够解析变量的,可是功能的缺失却换来了速度的提高,因此说,若是在字符串中没有须要解析的变量,那么就使用单引号是最好的。
而双引号的建立的字符串,由于能够解析变量,因此在某些对字符串的操做时是常用的。
$a = “hello,world!”;
$b = ‘how are you ?’;
$c = “lilei,$a”; // 输出的结果为lilei,hello,world!
整型:
整数,顾名思义,就是没有小数位的数字。
那么php对于整数的定义也有着一些须要注意的规则:
①整数必须至少有一个数字
②整数不能包含逗号或者空格
③整数不能有小数点
④整数正负都可
⑤能够用三种格式规定整数:十进制、十六进制、或者八进制。
浮点:
浮点数就是有小数点或者指数形式的数字。
在使用的过程当中,浮点数既能够用来存储小数,也能够用来存储整数。
布尔:
布尔型在任何一门语言当中都是比较常见的数据类型之一,它有两个值,true/false。
数组:
数组能够说是一组数据的集合,它把一系列的数据组织存储起来,造成一个能够操做的总体。数组中能够包含不少的数据类型,例如字符串、布尔、浮点,甚至能够包括对象以及资源类型。
数组中的每个数据称之为元素,元素包括索引值(键名)和值两个部分。索引能够是数字或者字符组成,也能够是默认由数组分配的值。
对象:
可能在不少的教科书里面对于“对象”都有着大篇幅的介绍和概念理论,可是简单点说,对象就是存储数据和有关处理数据信息的一种数据类型。
而若是想要去建立一个对象,在php中须要先声明一个类,再由类演化成对象。
例以下面的代码,咱们经过类来建立一个对象。
Null空值:
null是一种较为特殊的类型,表示变量为空的一种状态,NULL类型里面惟一的值就是null。
一般状况下用在给预留变量赋值使用。
资源:
资源类型表明的是经过php去读取某些文件的时候,返回的数据类型,例如经过函数读取了一个txt文件,那么返回值就是一个资源类型。
5、数据类型转换
php是一门弱类型语言,由于咱们在声明一个变量 的时候,并不须要指明它保存的数据类型,可是PHP虽然是弱语言,但有时候仍然须要用到类型转换。
php容许转换的列表以下:
在php中转换数据类型,有三种转换方法:
第一种,只须要在要转换的变量以前加上用括号括起来的类型名称便可,像下面这样:
1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: liujunhang 5 * Date: 2018/6/18 6 * Time: 22:05 7 */ 8 $num1 = 3.14; 9 $num2 = (int)$num1; 10 var_dump($num1); // float(3.14) 11 var_dump($num2); // int(3)
第二种,使用3个具体类型的转换函数,intval()、floatval()、strval():
1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: liujunhang 5 * Date: 2018/6/18 6 * Time: 22:05 7 */ 8 9 $a = "123.43abc"; 10 $int = intval($a); // 转换成整型 11 var_dump($int); // int(123) 12 $float = floatval($a); // 转换成浮点 13 var_dump($float); // float(123.43) 14 $str = strval($a); // 转换成字符串 15 var_dump($str); // string(9) "123.43abc"
第三种,使用settype()函数,该函数能够将指定的变量转换成指定的数据类型,语法以下:
settype(mixed
var
,string type)
参数var为指定的变量;参数type为指定的数据类型。参数type有7个可选值,即boolean,float,integer,array,null,object和string,若是转换成功setype()函数返回true,不然返回false。
1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: liujunhang 5 * Date: 2018/6/18 6 * Time: 22:05 7 */ 8 $num = 12.9; 9 $flag = settype($num,"int"); 10 var_dump($flag); // bool(true) 11 var_dump($num); // int(12)
当字符串转换为整型或浮点型时,若是字符串是以数字开头的,就会先把数字部分转换为整型,在舍去后面的字符串;若是数字中含有小数点,则会取到小数前一位。
6、检测数据类型
咱们在开发的过程当中常常碰到须要监测数据类型,从而作出判断,咱们能够根据下面的这些方法来进行监测:
7、php中三种输出方式
在php中基础的输出方式有echo、print,以及var_dump三种方式。
其中echo可以输出一个或者多个字符串,而print仅可以输出一个字符串。var_dump能够打印数据而且返回数据类型。
8、php字符集设置
php是一门跨平台的语言,因此也就致使了相同的代码在不一样的平台上由于不一样平台的差别从而不能很好的运行下去,这其中字符集编码就是常常出现的问题,而为了解决这个问题,咱们就须要在代码中进行字符集编码设置。
设置字符集能够采用下面这条代码:
header("Content-type:text/html;Charset=utf-8");
9、php常量
php常量相似于变量,可是常量一旦被定义就没法更改或者撤销定义。而常量名一般是以字符或者下划线开头(常量名前面并无$符号)。
设置php常量,须要使用define()函数,define函数有三个参数:
可选的第三个参数规定常量名是否对大小写敏感。默认是false。
常量在项目的开发中使用的频率很是高,一般状况下用于设定一些配置参数或者固定的参数。常量默认的做用域为全局。
10、php字符串详解
上面咱们说到,建立一个字符串须要单引号或者双引号,而一个字符串string就是由一系列的字符组成,其中每一个字符至关于一个字节。须要注意的是php 的string 最大能够达到2GB。
建立一个字符串除了上面咱们说的两种常见的使用方式,还有另外的两种方式,下面对这四种使用方式进行展现:
上面对字符串的四种方式简单的应用了一下:
①双引号
②单引号
③heredoc
④nowdoc
在Heredoc 结构中,同双引号同样是能够进行解析工做的。以下:
Heredoc还能够进行再复杂一点的操做:
甚至在须要的时候还能够进行传参。
Tip:在字符串操做的时候,不管是双引号仍是Heredoc结构均可以解析变量,这其中解析能够直接将变量写在里面使用,可是一旦进行稍微复杂一点的操做,例如上面对象查询属性等操做,就须要使用{},由于{}在字符串里不解析,因此能够将表达式写在{}里面,可是必须和美圆符号紧贴。
11、php运算符
运算符是能够经过给出的一或多个值(用编程行话来讲,表达式)来产生另外一个值(于是整个结构成为一个表达式)的东西。
运算符可按照其能接受几个值来分组。一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。 二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。最后是惟一的三元运算符 ? :,可接受三个值;一般就简单称之为“三元运算符”(尽管称之为条件运算符可能更合适)。
php的运算符在开发当中是必不可少的内容,可是就如同咱们学习小学数学同样,也是一样具备前后顺序的。
下面咱们来讲一下运算符的优先级。
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是由于乘号(“*”)的优先级比加号(“+”)高。必要时能够用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。
若是运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 而且结果是 -4. 另一方面,"="是右联的,因此 $a = $b = $c 等同于 $a = ($b = $c)。没有结合的相同优先级的运算符不能连在一块儿使用,例如 1 < 2 > 1 在PHP是不合法的。但另一方面表达式 1 <= 1 == 1 是合法的, 由于 == 的优先级低于 <=。
括号的使用,哪怕在不是必要的场合下,经过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,一般可以增长代码的可读性。
下表是官方文档里面对于运算符优先级给出的定义,在这里并不强调你们所有记住,在编写表达式的时候咱们彻底能够灵活的运用小括号()这种形式来提高优先级。
诸位同窗是否还记得学校里学到的基础数学知识?就和他们同样。
经过上面的算术运算符进行表达式运算很简单,可是也有一些须要注意的点:
除法运算符老是返回浮点数。只有在下面的状况下例外:两个操做数都是整数(或字符串转换成的整数)而且正好能整除,这是它返回一个整数。
取模运算符的操做数在运算以前都会转换成整数(除去小数部分)。
取模运算符%的结果和被除数的符号(正负号)相同。即$a % $b 的结果的符号和$a的符号相同。
在php中,赋值运算符(=) 与 数学中的“等于”是不一样的,赋值运算符至关于把右边表达式的值赋给左边的运算数。
除了上述的基础赋值运算符,还有适合于全部二元算数,数组集合和字符串运算符的”组合运算符”,这样能够在一个表达式中使用它的值并把表达式的结果赋给它。
处理上面例子里面的+=,.=之外,不少运算符都是能够组合的,例如-= ,*= 等等。
在php中存在引用赋值的使用方式。
位运算符容许对整型数中指定的位数进行求值操做。
位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。
就如同名字所暗示的,比较运算符容许对两个值进行比较。
若是比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值而且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,由于此时类型和数值都要比对。
对于多种类型,比较运算符会根据下标进行比较:
Tip:由于浮点数float的内部表达式,因此不该该比较两个浮点数是否相等。
三元运算符
三元运算符至关于简化版的if判断,以?:来组成三元运算符。
从php5.3开始,能够省略中间的部分,例以下面:
Tip:尽量的不要将三元运算符堆积在一块儿使用,会形成php语句不清晰。
php中存在错误抑止符,也叫错误控制运算符,是一个简单的@符号,那么将@符号放置在表达式的前面就可以屏蔽掉表达式中的存错,可是这种写法在实际开发中是禁止使用的,由于咱们看见的报错实际上是程序和咱们之间的交互,经过错误告诉咱们哪里出了问题,可是一旦咱们将这种错误屏蔽掉,可能直接致使项目没法运行可是却什么错误都看不到。
执行运算符,顾名思义,就是只要被执行运算符包裹的代码都至关于一条命令是能够执行的。
PHP 将尝试将反引号中的内容做为 shell 命令来执行,并将其输出信息返回(即,能够赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。
例如上面的代码,咱们是将执行运算符获得的结果内容存储到一个变量中而且输出。
须要注意的是,反引号运算符在激活了安全模式或者关闭了shell_exec()时是无效的。同时,反引号不可以在双引号字符串中使用。
PHP支持c风格的前/后递减与递增运算符。
Tip:递增/递减并不影响布尔值,递减Null值也没有效果,可是递增null值得结果为1.
在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,而且只支持纯字母(a-z 和 A-Z)。递增/递减其余字符变量则无效,原字符串没有变化。
主要是对逻辑操做起到辅助做用。
在php中,存在两个字符串运算符。
第一个是 ‘ . ’ ,第二个是’.=’。
. 返回的是左右连接后的字符串,第二个是将右边的参数附加到左边的参数以后。
+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只使用左边数组的,右边的被忽略。
instanceof 用于肯定一个php变量是否属于某一类class的实例。
12、php数组
PHP 中的数组其实是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在不少方面作了优化,所以能够把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。因为数组元素的值也能够是另外一个数组,树形结构和多维数组也是容许的。
可使用array() 来定义一个数组。它接受任意数量用逗号分隔的键(key) =>值(value)对。
key能够是一个整数integer或者字符串string 。
value 值能够是任意类型的值。
在单行数组当中,最后一个数组单元的逗号能够省略,例如array(1,2) 。
在多行数组当中,最后一个数组单元的后面一般状况下要保留一个逗号,这样添加新单元的时候方便。
Tip:自php5.4起,可使用短数组定义语法,用[]代替array()。
Tip:key能够是int或者string,value能够是任意类型。
此外 key 会有以下的强制转换:
①包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。可是 "08" 则不会强制转换,由于其不是一个合法的十进制数值。
②浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
③布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
④Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
⑤数组和对象不能被用为键名。坚持这么作会致使警告:Illegal offset type。
Tip:在数组中定义了多个单元都使用了同一个键名,则只使用了最后一个,以前的都被覆盖了。
在使用php数组的时候,php数组能够同时含有integer和string类型的键名,由于php实际并不区分索引数组和关联数组。若是数组中没有给定键名,那么则取当前最大的索引值,新的键名将该值加一。若是指定的键名已经有了值,则该值会被覆盖。
下面是一个包含int键值和string键值的数组:
在上面的例子中存在一个咱们没有设置键的元素,系统会默认分配给它一个键,而这个键是当前最大int类型的键值+1.
当咱们须要访问数组元素的时候,能够采用[] 这样的形式。
咱们也能够经过{} 的形式访问数组元素。
在php5.4以后咱们能够直接在函数中引用数组,以下:
上面的这种写法在以前是不能够的。
若是想要添加和修改数组元素,一样能够采用方括号的形式。
若是要删除某个数组元素,可使用unset()方法。
当咱们进行删除操做时,有一种状况是须要注意的:
在上面的代码中,咱们清空了一个数组,而后从新向数组中注入新的值,而且没有给值设置索引,那么新添加的这个值采用的索引就是以前删除的数组最大的数值索引+1。
Tip:unset()函数容许删除数组中的某个键,可是注意数组将不会重建索引。若是要删除后重建索引,可使用array_values()函数。
十3、PHP超全局变量
超全局变量 — 超全局变量是在所有做用域中始终可用的内置变量。
PHP 中的许多预约义变量都是“超全局的”,这意味着它们在一个脚本的所有做用域中均可用。在函数或方法中无需执行 global $variable; 就能够访问它们。
这些超全局变量是:
引用全局做用域中可用的所有变量。$GLOBALS自己就是一个数组,一个包含了所有变量的全局组合数组。变量的名字就是数组的键。
Tip: $GLOBALS 也称之为自动化的全局变量。这表示能够在全局的任何地方使用它。
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器建立。不能保证每一个服务器都提供所有项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
具体信息能够参考:https://www.cnblogs.com/liujunhang/articles/9178070.html
经过url参数传递给当前脚本的变量的数组。一般状况下用于表单传递。
例以下面的实例(注意,php代码和html代码在同一个页面):
当咱们提交过一次留言后,能够看到浏览器url已经发生了变化。
当HTTP POST 请求的Content-Type 是 application/x-www-form-urlencoded 或multipart/form-data 时,会将变量以关联数组形式传入当前脚本。
在上面咱们使用了get方式进行了html和php数据交互,咱们能够将get方法换成post方法。
$_REQUEST - HTTP request 变量。
默认状况下包括了$_GET、$_POST 和$_COOKIE 的数组。
上面几个是常见的超全局变量。还有一些其余的超全局变量暂时是咱们用不到的,而且使用频率不是很高,后面须要在来讲。
十4、php流程控制
任何 PHP 脚本都是由一系列语句构成的。一条语句能够是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不作的语句(空语句)。语句一般以分号结束。此外,还能够用花括号将一组语句封装成一个语句组。语句组自己能够看成是一行语句。
if else 语句能够根据条件进行判断,若是知足条件执行对应的代码。
还有下面的一些变化,例如在html中知足条件输出内容:
当咱们在开发中若是须要进行批量的重复性的工做,就能够在代码中开启一个循环,让php帮你去执行和重复。
while循环语句
语法:
while (expr):
statement
....
endwhile;
例以下面就是两个简单的循环的例子:
do while循环语句
do while循环语句和while很类似,不一样的是表达式的值是在每次循环结束时检查而不是在循环开始时检查。而且和通常的循环不一样的是,即便开始的时候条件就为false,do while也会执行一次。
for循环
php中的for循环与c语言相似,基础的语法以下:
for(条件1;条件2;条件3){
coding
}
须要注意的是三个条件的执行时机:
条件1 会在循环开始前执行一次,
条件2会在每次循环开始前进行判断,若是为true,那么执行循环
条件3会在每次循环后开始执行
看下面的例子,体会三条条件执行的时机:
for循环一样还有另一种写法:
假设有一个数组,咱们须要取出数组中全部的值进行某些操做,咱们就可使用循环来完成,由于这种重复性较高的工做循环的效率远远超过咱们本身一个个取值。
foreach 遍历数组
上面的代码中,咱们经过for循环遍历了数组,将数组中的值取了出来,可是在php中,给咱们提供了一个专门用来遍历数组的方法foreach。
foreach仅可以应用于数组和对象。
基础语法以下:
foreach ($array as $value){}
foreach($array as $key => $value){}
break
break关键字可以结束当前的for,foreach,while,do-while或者switch等结构。同时,break可以接受一个可选的参数来决定可以跳出几层循环。
下面的实例是在for循环里面嵌套switch,再经过break进行指定层数跳转。
continue 跳过本次循环
在循环中,咱们能够经过continue来跳过本次循环,可是循环依旧继续。
switch 语句
switch语句的功能很相似if判断,能够先来看下面的例子:
上面是switch的用法和实例,咱们在使用的时候还能够对switch写法上进行一些变化:
上面是switch的两种写法,固然,在实际应用中并不强制使用哪一种方式,而是哪一种使用更方便就使用哪一种。
不管是require仍是include ,两者都是用来引入文件,并且两者几乎同样,除了处理失败的方式不一样以外。
require 在错误产生时产生E_NOTICE级别的错误,换句话说会致使脚本中止运行。
include会产生E_WARINE警告,程序会继续执行。
和上面两位的用法同样,只不过使用require_once 和 include_once的时候,会检查是否已经引用,若是文件已经引用将再也不引用。
上面的四位,实际上是咱们在项目开发中常用的方法,例如进行web开发的时候,网页的开头和结尾都是相同的,咱们就没有必要去每一个网页都写一份开头和结尾,而是只写一份,放在公用的目录中,每一个网页中只引用一次便可。
goto操做符能够用来跳转到程序的另一个位置。php中对goto存在必定的限制,目标位置只能位于同一个文件和做用域,也就是没法跳出一个函数或类方法,也没法跳入到另外一个函数。也没法跳入到任何循环或者 switch 结构中。能够跳出循环或者 switch,一般的用法是用 goto 代替多层的 break。
15.php函数
在开发过程当中,或者说在项目的功能业务实现的过程当中,咱们会常常碰到代码重复的现象,而为了节约开发时间和成本(主要是由于懒),咱们就能够将这些重复的代码进行封装,封装成函数,一次封装,重复调用,就能够摆脱这种麻烦。
而php的强大的缘由之一就是官方给咱们封装了不少不少的功能性函数,例如咱们以前用到的var_dump(),就是一个封装好的函数。
咱们也能够根据本身的需求进行函数自定义封装。
咱们能够将用户登陆这种经常使用的功能进行一下函数的封装。
上面的代码是咱们根据需求写的一段伪代码,那么在真实的开发环境下是须要更加严谨和复杂的,咱们只是简单的模拟下。
那么在进行函数的封装的时候,咱们须要注意的点有三个:第一个是函数的说明,一般状况下写在函数的上面,目的是为了往后团队他人调用的方便,其次在程序的关键步骤进行注释,由于不少时候,咱们本身以前敲过的代码可能过了好久后本身也会忘掉,因此写好注释可以在后期的维护和升级时起到很大的帮助。
上面咱们经过一段伪代码简单的说了一下函数封装,下面咱们来演示一下函数的参数问题,
须要知道的是,形参的做用范围仅限于函数内部,在函数外部则无法使用。
一般状况下,咱们在函数中进行操做的变量是没办法在函数外部的做用域直接访问的,若是咱们须要函数里面的数据,咱们能够经过return来将数据进行返回,做为调用这个函数产生的返回值返回到函数的外面。从而在函数的外面进行其余业务操做。
在php中,还有一种很重要的函数,就是下面咱们要说的匿名函数。
匿名函数(anonymous functions ) ,也叫闭包函数(closures),容许临时建立一个没有指定名称的函数。最常常用做回调函数(callback)参数的值。固然也有其余的应用状况。
例以下面就是一个简单的实例:
输出结果:
在上面的实例中,咱们在使用preg_replace_callback()方法时,第二个参数则是一个匿名函数,也能够称之为闭包函数 。
在这须要强调的是,php中的闭包函数跟传统的闭包函数写法是有些区别的,例如在JavaScript中的闭包函数写法以下:
可是在php中并不存在这种传统的闭包函数,若是站在子函数能够调用父域内的变量这种角度来定义闭包函数,那么在php中,可使用use。
例以下面的例子,函数经过use关键字来调用父域中的变量,另外,下面例子中的匿名函数被存储在变量中也是一种常见的写法。
在使用函数时,咱们也能够经过函数的形参列表将函数传入。
16. php魔术常量