Blogger Information
Blog 48
fans 0
comment 0
visits 40818
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
匿名函数,命名空间,类的初学--2019年09月28日20时00分
小星的博客
Original
786 people have browsed it

匿名函数

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

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

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; // 注意;访问类中属性时不需要加 $

类与对象是紧密联系的:

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

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

总结

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

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

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

Correction status:qualified

Teacher's comments:类与对象,命名空间是现代编程的基础
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments