Blogger Information
Blog 30
fans 0
comment 1
visits 24017
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0214闭包与异常
Original
719 people have browsed it

闭包

PHP中的闭包,就是匿名函数,没有其他的区分

  1. <?php
  2. $a = function (){
  3. return '这里是匿名函数';
  4. };
  5. // 以函数方式调用,需要加括号
  6. echo $a();

如果类里面有invoke()方法,也可以把类实例对象当作闭包函数来调用,输出内容为此方法里面的内容

  1. <?php
  2. class Demo
  3. {
  4. public function __invoke()
  5. {
  6. return '这是类里面的invoke方法';
  7. }
  8. }
  9. $obj= new Demo;
  10. echo $obj();

如果类里面有toString()方法,也可以把类实例对象当作字符串直接输出,输出内容为此方法里面的内容

  1. <?php
  2. class Demo
  3. {
  4. public function __toString()
  5. {
  6. return '这是类里面的toString方法';
  7. }
  8. }
  9. $obj= new Demo;
  10. echo $obj;

如果类里面有callStatic()方法,访问类中一个不存在的静态方法时,会自动触发这个方法

  1. <?php
  2. class Demo
  3. {
  4. public static function __callStatic($name, $arguments)
  5. {
  6. echo '这是类里面的callstatic方法';
  7. }
  8. }
  9. //输出的是callstatic方法里面的内容
  10. Demo::fetch();

bindTo()方法,把一个闭包绑定给闭包对象或者绑定在一个类的内部
格式
将要绑定的闭包->bindTo(闭包对象,类)//两个被绑定的参数只用一个也行

  1. <?php
  2. namespace chapter;
  3. // 使用闭包访问类中的成员,(通过访问类中的方法,其返回值,来访问到类成员)
  4. class Demo1
  5. {
  6. public $name='杨过';
  7. public $school='古墓派';
  8. //如果以函数操作输出闭包对象,就会调用此方法,把闭包对象当作函数输出
  9. public function __invoke()
  10. {
  11. return $this->name. ':' .$this->school;
  12. }
  13. }
  14. // 创建一个闭包对象
  15. $demo1 = new Demo1;
  16. // 直接输出闭包对象
  17. echo $demo1();
  18. // 创建一个闭包,用来修改类中的属性
  19. $set = function (string $name,string $school) : void
  20. {
  21. $this->name = $name;
  22. $this->school = $school;
  23. };
  24. // 把修改用闭包绑定给demo1的闭包对象,并赋值给新的变量
  25. $res = $set->bindTo($demo1);
  26. // 修改demo1里面的属性
  27. $res('周芷若', '峨眉派');
  28. echo $demo1();

异常

登录验证

  1. <?php
  2. namespace chapter;
  3. // 引入异常类
  4. use Exception;
  5. //引入PDO
  6. use PDO;
  7. //创建一个自定义异常类继承系统自带异常类
  8. class MyException extends Exception
  9. {
  10. public function __toString() : string
  11. {
  12. return
  13. '<table border="1" cellspacing="0" cellpadding="3">
  14. <tr>
  15. <td>错误信息</td>
  16. <td>错误代码</td>
  17. <td>操作</td>
  18. </tr>
  19. <tr>
  20. <td>'.$this->message.'</td>
  21. <td>'.$this->code.'</td>
  22. <td><a href="demo.html">返回</a></td>
  23. </tr>
  24. </table>';
  25. }
  26. }
  27. // 创建数据源
  28. $dsn = "mysql:host=localhost;dbname=phpedu";
  29. $name = 'root';
  30. $word = 'root';
  31. //创建pdo对象
  32. $pdo = new PDO($dsn,$name,$word);
  33. // SQL语句
  34. $sql = "SELECT * FROM `user`";
  35. $stmt=$pdo->prepare($sql);
  36. $stmt->execute();
  37. //获取数据库里面的用户信息
  38. $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
  39. //获取跳转链接信息
  40. $action = filter_input(INPUT_GET,'action');
  41. if($action === 'login'){
  42. //判断信息获取方式
  43. if(filter_input(INPUT_SERVER,'REQUEST_METHOD')==='POST'){
  44. //获取用户名
  45. $username = filter_var(filter_input(INPUT_POST,'username'),FILTER_SANITIZE_STRING);
  46. //获取密码
  47. $password = sha1(filter_input(INPUT_POST,'password'));
  48. //判断登录用户是否存在于数据库中
  49. $result = array_filter($users, function ($value) use ($username, $password) {
  50. return $username === $value['name'] && $password === $value['password'];
  51. });
  52. //异常判断
  53. try{
  54. //异常判断,创建自定义异常类并传入参数
  55. if(count($result)!==1)throw new MyException('用户名或者密码错误',101);
  56. }catch (MyException $e){
  57. echo $e;
  58. };
  59. }
  60. }
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