博客列表 >匿名函数,命名空间,类的初学--2019年09月28日20时00分

匿名函数,命名空间,类的初学--2019年09月28日20时00分

小星的博客
小星的博客原创
2019年10月26日 05:53:20785浏览

匿名函数

当一个函数没有名字时,就是一个匿名函数。

匿名函数有三种应用场景:

1. 作为一个值来使用

$fun = function ($a, $b) {
    return $a + $b;
};
echo $fun(3, 4);

2. 作为回调函数

这里以 排序函数为例:

$arr = [5,32,6,7,23,90];
usort($arr, function ($a, $b) {
    return $a - $b;
});
print_r($arr);

3. 获取父作用域中变量

一般函数中访问外部变量需要使用 global ,但是匿名函数有其独特的语法

$name = 'zmx';
$sex = 23;
$fas = function() use ($name,$sex) {
    return $sex;
};

$fa = function() use ($name){
    return $name;
};

当匿名函数用于获取父作用域时,就形成了闭包。

//获取父函数中变量,就是闭包
function fun1() {
    $age = 19;
    // 看到这种函数中返回函数的形式一般就是 php的闭包
    return function() use ($age) {
        return $age;
    };
}
echo fun1()(); // 因为 fun1() 返回的是一个函数,所以需要再执行一次。


命名空间

命名空间是一种封装事物的方法,其实就是将 函数,类等东西一块包起来隔离起来,防止重名冲突。有点像计算机的文件目录,在同一个目录不能存在同名文件,但是不同目录下却能有同名文件,这个父目录其实就有点像命名空间,担任了隔离的动能。

只要记住:命名空间主要就是 解决 类/函数/常量之间的命名冲突的。

命名空间有两种:全局空间(默认空间)用 \ 表示自定义空间

这里先创建两个php文件,分别使用不同命名空间

<?php
namespace space1;
function sum() {
  return '28';
}
<?php
namespace space2;
include __DIR__.'/space1.php';

function sum() {
  return 90;
}
// 默认调用当前命名空间的 sum;
echo sum();

// \ 代表全局空间,默认空间,根空间, 如果当前命名空间是全局空间时,可以省略
//echo \sum();

//查找局部空间,默认是从当前空间开始查找
echo \space2\sum().'<br/>';
echo \space1\sum();

// 这样写会报错, 这里 其实是查找的 space2\space2\sum(); 找不到
//  只有从 根目录上开始查找能找到 sapce2 空间
echo space2\sum();

// 使用 namespace 指当前命名空间
echo namespace\sum();

   注:命名空间的应用对象是  函数/常量/类/接口,因为这些是不允许重名的


类是实现代码封装和重用的机制。

1. 创建一个类

<?php
namespace space4;

class Phone
{
  public $product = 'phone'; // php中属性是前要加上 访问控制
  public $price = '200';
}

2. 将类实例化生成一个对象

$phone1 = new Phone();

3. 访问类中成员

echo $phone1->price; // 注意;访问类中属性时不需要加 $

类与对象是紧密联系的:

对象是类的实例,类是对象的模板。

( 比喻:类就像车间中的模具,对象就像用模具生产出来的模型 )

总结

  • 匿名函数的使用场景:作为值调用,回调(用的比较多),访问父作用域变量。

  • 命名空间其实是一种隔离机制,主要应用对象有: 函数/常量/类/接口,因为它们都是不允许重名的。

  • 类既然是一种代码复用的手段,就说明就是用来多次使用的,是一个抽象的东西;对象就是经过 类 的实例化生产的出来的东西,是具体的,不要搞混了。

上一条:20191010作业下一条:js学习笔记
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议