博客列表 >0214闭包与异常

0214闭包与异常

曾
原创
2020年03月02日 19:33:27720浏览

闭包

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. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议