一、匿名函数的三个应用场景。
1,匿名函数作为值使用
$val = function ($a,$b){ return $a+$b; }; echo $val(3,4);
2,匿名函数作为回调使用
$arr = [1,3,4,5,66,2]; //usort 自定义数组排序 usort($arr,function($a,$b){ return $a - $b; //从小到大 return $b - $a; //从大到小 }); echo '<pre>' . print_r($arr,true)
3,匿名函数父作用域变量
function fun(){ $name='匿名函数'; return function () use($name){ return $name; } } echo fun()();
总结:匿名函数也称闭包函数,与JS的闭包不同,请勿混淆。
二、命名空间。
默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间
//多个命名空间的使用场景 //namespace: 创建命名空间, 脚本的第一行代码 namespace one{ class test { //... } } namespace two{ class test { //... } } namespace three{ class test { //... } } //创建全局空间 namespace { class test { //... } }
三、类与对象的关系
//1,声明命名空间 namespace demo; //2,创建类 class Demo { //定义属性,声明类型 public $name = '姓名'; public $sex = '性别'; } //3,创建类的实例 $obj = new Demo();
总结:
命名空间可防止类,函数,变量的命名重复;应用对象一般为,类,常量,对象和接口四种。
注意:use就相当于一种声明,并不解析和加载。也就意味着还是得用require或者include将文件包含进来,或者使用autoload自动加载;正因为需要进行文件包含,而不是直接通过命名空间进行加载,所以PHP文件的命名空间声明和文件在磁盘中的实际位置并没有关联;如果不声明命名空间,则默认为全局命名空间。