博主信息
博文 30
粉丝 0
评论 1
访问量 30337
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
0214闭包与异常
原创
916人浏览过

闭包

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学