博客列表 >02月14日作业:闭包和异常

02月14日作业:闭包和异常

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2020年02月17日 00:05:24977浏览

作业一

知识点:
一、闭包:
1、在php中闭包即匿名函数,闭包是一个对象,一个clousre类实例;
2、闭包最常用的环境:函数或者方法的回调参数
3、闭包可以将一个执行环境(父级中的变量/状态)封装到匿名函数中
二:闭包中的类方法
1、bindTo():复制当前闭包对象,绑定指定$this和类作用域(实列方法)
2、bind():复制一个闭包对象,绑定指定$this和类作用域(静态方法)
3、__invoke():将闭包对象当成函数用时触发;(魔术方法)
4、__construct(void):构造方法,禁止外部实列化clousre类
5、__toString():将对象当成字符串输出时自动触发;
三:异常类:

  1. Exception {
  2. /* 属性 */
  3. protected string $message ;
  4. protected int $code ;
  5. protected string $file ;
  6. protected int $line ;
  7. /* 方法 */
  8. public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
  9. final public getMessage ( void ) : string
  10. final public getPrevious ( void ) : Throwable
  11. final public getCode ( void ) : int
  12. final public getFile ( void ) : string
  13. final public getLine ( void ) : int
  14. final public getTrace ( void ) : array
  15. final public getTraceAsString ( void ) : string
  16. public __toString ( void ) : string
  17. final private __clone ( void ) : void
  18. }

四、其他
1、array_filter():数组过滤函数,对传入数组中的每一个元素进行处理,返回结果为true元素的组成的新数组;
2、in_array($value,$array);判断$value是否在$array数组中,返回的bool值
3、AEEAY_FILTER_USE_KEY:是数组过滤函数的参数,返回数组中的键值;
4、__callStatic();当访问一个类中不存在静态方法时,会自动触发这个魔术方法

作业二:闭包案例

代码:

  1. <?php
  2. namespace part0;
  3. use Closure;
  4. $closure=function (string $name) :Closure {
  5. return function(string $var) use($name){
  6. return sprintf('%s,%s',$name,$var);
  7. };
  8. };
  9. $c=$closure('种业圈');
  10. $str=$c('欢迎你');
  11. echo $str.'<br>';
  12. echo '<hr>';
  13. class User
  14. {
  15. public $name='张无忌';
  16. public static $school='明教';
  17. private $age=30;
  18. public function __toString()
  19. {
  20. return $this->name.'入'.static::$school.$this->age.'年';
  21. }
  22. public function set($n)
  23. {
  24. $this->age=$n;
  25. }
  26. }
  27. $user=new User;
  28. echo $user;
  29. echo '<br>';
  30. $set=function(string $name, string $school, int $age): void {
  31. $this->name=$name;
  32. static::$school=$school;
  33. $this->set($age);
  34. };
  35. $cl=$set->bindTo($user,User::class);
  36. $cl('朱老师','php中文网',15);
  37. echo $user;

实现效果:

作业三:异常

  1. <?php
  2. namespace one;
  3. use Exception;
  4. class MyException extends Exception
  5. {
  6. public function __toString()
  7. {
  8. return <<< DOC
  9. <table border="1" cellspacing="0" cellpadding="5">
  10. <tr bgcolor="wheat">
  11. <th>错误信息</th>
  12. <th>代码</th>
  13. <th>文件</th>
  14. <th>行号</th>
  15. </tr>
  16. <tr>
  17. <td>$this->message</td>
  18. <td>$this->code </td>
  19. <td>$this->file </td>
  20. <td>$this->line</td>
  21. </tr>
  22. </table>
  23. DOC;
  24. }
  25. }
  26. try{
  27. if(true) throw new MyException('密码不一致',400);
  28. }catch(MyException $a){
  29. echo $a;
  30. };

效果图:

作业四:

闭包类中:
bind($clousre,$class,Class::class)和$clousre->bindTo($class,Class::class)中的参数,没有类对象(类实列时)直接绑定类时,类实例应为null;

1、bindTo()的使用:

  1. $bind=$colusre->bindTo($class);//闭包绑定类返回新的闭包
  2. $bind(...$var);//运行闭包到类,执行绑定到类

2、bind()的使用:

  1. $bind=Clousre::bind($clouser,$class);$bind(...$var);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议