9月29日作业
1. 自写案例演示匿名函数的三个应用场景
<?php // // 匿名函数, 函数表达式 // // 场景1: 匿名函数做为:值来使用 // $sum = function ($a, $b) { // return $a + $b; // }; // // 按值调用,值保存在哪里? $sum // echo $sum(46, 99); // echo '<hr>'; $xf = function ($a,$b,$c) { return $a * $b *$c; }; echo $xf (3,4,5); echo '<hr>'; //---------------------------------------- //usort — 使用用户自定义的比较函数对数组中的值进行排序 //第一参数用来 输入的数组 //第二个参数是用来比较的规则 在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。 //且该函数由于比较特殊是匿名函数就是没有名字 //$b-$a是降序 //$a-$b是升序 //<pre>标签是将数组格式化 //true是将数组搞进缓冲区不会再打印到浏览器中 //------------------------------------------ // 匿名函数用在什么地方? // 2. 做为回调参数来使用 // 回调: 回头调用 $arr = [3,1,6,2,9,7,11]; usort($arr, function ($a, $b){ return $b - $a; }); echo '<pre>' . print_r($arr, true); echo '<hr>'; //---------------------------------------- //通过use调用 // 3. 获取父作用域中的变量 $name = '万物皆可程序'; $f1 = function () use ($name) { return $name; }; echo $f1(); echo '<hr>'; // ----------------------------------------------------------------- // demo 是父函数 function demo() { // 父作用中变量 $email = 'zhu@php.cn'; // func: 匿名子函数 return function () use ($email){ return $email; }; } echo demo()(); //获取父函数的子函数就是闭包 //准确的说 匿名子函数就是闭包 //----------------------------------------------------------------- //函数的声明: function func_name() {} //函数的调用: func_name(); // //参数: 必选参数,可选参数/默认参数, 剩余参数 // //匿名函数 //1. 值 //2. 回调 //3. 闭包 ?>
2. 深刻理解全局空间的意义,并实例演示多个命名空间的场景
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间
匿名空间的代表就是全局空间
命名空间的意义:一个最明确的目的就是解决重名问题.命名空间将代码划分出不同的区域,每个区域的常量、
函数和类的名字互不影响。
演示多个命名空间的场景 <?php // 命名空间必须是脚本的第一行代码 namespace red; // 类是对象的模板 class Test { // TEST是属于red的类 } namespace green; class Test { // Test是属于green的类 namespace blue; class Test { // test是属于blue的类 } // 无法创建匿名空间: \ //如果非要创建匿名空间则如下 namespace { class Test { //... } }
03. 实例演示类与对象的关系与使用方式
php //对象由类产生 new+类名->对象obj 然后通过对象变量名obj ->访问属性 namespace _0929; class Demo6 { // 变量给它一个逼格高的名称: 属性 public $product = '手机'; public $price = 2800; } //一个程序中, 至少要有变量和函数,最基本的组成部分 // 1. 类的实例化 就是找一个对象demo6->obj然后通过obj用对象访问符->进行访问 $obj = new Demo6(); // 2. 访问类中成员,用对象访问 // ->代表对象访问符 echo '商品名称: ' . $obj->product, '<br>'; echo '商品价格: ' . $obj->price; ?>
总结命名空间的应用对象, 适用场景以及注意事项
2如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间
3匿名空间的代表就是全局空间
4匿名函数创建时调用,用完即销毁,节省内存
5匿名函数可以防止函数名重复
命名空间的意义:一个最明确的目的就是解决重名问题.命名空间将代码划分出不同的区域,每个区域的常量、
函数和类的名字互不影响。
当多个人开发多个模块时,避免不了类、方法等重名问题,需要引入命名空间,使用命名空间需要注意:
(1)前面不能有任何语句(除注释);
(2)用namespace 进行命名,引用必须是绝对命名空间 \A\B 错误 A 前面不能有斜杠
(3)如果有多个命名空间拥有相同的代码片段嵌套命名空间或者定义多个命名空间是不可能的,
如果有多个命名空间namespace一起使用则只有最后一个才能被识别。
但是同一个文件中,可以定义不同的命名空间代码