匿名函数的三个应用场景、命名空间、类与对象-2019-09-29
程序员文章站
2022-03-11 14:12:54
...
1.匿名函数
<?php //1.匿名函数三个应用场景 //1.1作为值被调用 $t=function ($a,$b){ return $a*$b; }; echo $t(10,10); echo'<hr>'; //1.2作为回调参数来使用 $arr=[7,9,10,5,33,6]; usort($arr,function($a,$b){ return $a-$b; }); echo'<pre>'.print_r($arr,true); echo'<hr>'; //1.3获取父作用域中的变量(此时匿名函数即为闭包) function s(){ $a=6666666666666; return function()use($a){ return $a; }; } echo s()(); ?>
效果图:
2.命名空间
命名空间:个人理解就是在出现两个或者以上相同代码内容时,为了区分 便于使用 且 在使用时不发生冲突 就得给他们取一个名字,课件中的namespace_0929,
可以翻译为:
为此空间取名为_0929.
注意:
命名空间必须是脚本的第一行代码
正常情况下,一个文件一个空间,不能将多个空间写在一脚本上
当一个php文件中创建了命名空间就无法创建匿名空间,即使可以做也不要做
相同的命名空间会合并,尽管不在一个脚本里
<?php namespace a; function aa($a,$b){ return $a+$b; } namespace b; function aa($a,$b){ return $a+$b; } echo \a\aa(10,20);
效果图:
3.类与对象
首先明确几点:类是对象的模板。类的载体是对象。类实例化后就是对象。打个比喻:我想要一个有黑色长发,身高165左右的女朋友。那我找女朋友的时候就要找符合这个要求的女孩。在这里,这两个要求其实就是我找对象时的模板(就要找这类女孩),凡是能装近这个模板的女孩都能做我对象,只是我能不能追到的问题,当我有一天真的找到了一个身高165黑色长发的女孩做我女朋友时,那我的要求就实例化(具体化)了,实例化结果 就是我女朋友。而且我女朋友身上有我当初提的要求(类的载体是对象)
<?php class black{ public $v='黑色长发'; public $vv='165'; } $obj = new black(); echo '要求:'.$obj -> v; echo '<br>'; echo '要求:'.$obj -> vv;
效果图:
此次作业有几个问题,希望老师在改作业时解答一下:
1.为什么匿名函数获取父作用域中的变量时,最后的echo s()();
这里要打两个圆括号?打一个就出错?
2.为什么在用呢pre时,一定要用true,有个缓冲区不然浏览器显示出来不对
3.匿名空间的代表是全局空间用 \ 表示,当我们创建一个脚本时,可否认为整个脚本就是一个全局空间?