Blogger Information
Blog 145
fans 7
comment 7
visits 165376
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
02月14日作业:闭包和异常
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
Original
984 people have browsed it

作业一

知识点:
一、闭包:
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);
Correcting teacher:天蓬老师天蓬老师

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
Author's latest blog post