批改状态:合格
老师批语:作业并没有按要求来, 希望下次注意, 继续努力
PHP中的闭包,就是匿名函数,没有其他的区分
例
<?php$a = function (){return '这里是匿名函数';};// 以函数方式调用,需要加括号echo $a();
如果类里面有invoke()方法,也可以把类实例对象当作闭包函数来调用,输出内容为此方法里面的内容
例
<?phpclass Demo{public function __invoke(){return '这是类里面的invoke方法';}}$obj= new Demo;echo $obj();
如果类里面有toString()方法,也可以把类实例对象当作字符串直接输出,输出内容为此方法里面的内容
例
<?phpclass Demo{public function __toString(){return '这是类里面的toString方法';}}$obj= new Demo;echo $obj;
如果类里面有callStatic()方法,访问类中一个不存在的静态方法时,会自动触发这个方法
例
<?phpclass Demo{public static function __callStatic($name, $arguments){echo '这是类里面的callstatic方法';}}//输出的是callstatic方法里面的内容Demo::fetch();
bindTo()方法,把一个闭包绑定给闭包对象或者绑定在一个类的内部
格式
将要绑定的闭包->bindTo(闭包对象,类)//两个被绑定的参数只用一个也行
例
<?phpnamespace chapter;// 使用闭包访问类中的成员,(通过访问类中的方法,其返回值,来访问到类成员)class Demo1{public $name='杨过';public $school='古墓派';//如果以函数操作输出闭包对象,就会调用此方法,把闭包对象当作函数输出public function __invoke(){return $this->name. ':' .$this->school;}}// 创建一个闭包对象$demo1 = new Demo1;// 直接输出闭包对象echo $demo1();// 创建一个闭包,用来修改类中的属性$set = function (string $name,string $school) : void{$this->name = $name;$this->school = $school;};// 把修改用闭包绑定给demo1的闭包对象,并赋值给新的变量$res = $set->bindTo($demo1);// 修改demo1里面的属性$res('周芷若', '峨眉派');echo $demo1();
登录验证
<?phpnamespace chapter;// 引入异常类use Exception;//引入PDOuse PDO;//创建一个自定义异常类继承系统自带异常类class MyException extends Exception{public function __toString() : string{return'<table border="1" cellspacing="0" cellpadding="3"><tr><td>错误信息</td><td>错误代码</td><td>操作</td></tr><tr><td>'.$this->message.'</td><td>'.$this->code.'</td><td><a href="demo.html">返回</a></td></tr></table>';}}// 创建数据源$dsn = "mysql:host=localhost;dbname=phpedu";$name = 'root';$word = 'root';//创建pdo对象$pdo = new PDO($dsn,$name,$word);// SQL语句$sql = "SELECT * FROM `user`";$stmt=$pdo->prepare($sql);$stmt->execute();//获取数据库里面的用户信息$users = $stmt->fetchAll(PDO::FETCH_ASSOC);//获取跳转链接信息$action = filter_input(INPUT_GET,'action');if($action === 'login'){//判断信息获取方式if(filter_input(INPUT_SERVER,'REQUEST_METHOD')==='POST'){//获取用户名$username = filter_var(filter_input(INPUT_POST,'username'),FILTER_SANITIZE_STRING);//获取密码$password = sha1(filter_input(INPUT_POST,'password'));//判断登录用户是否存在于数据库中$result = array_filter($users, function ($value) use ($username, $password) {return $username === $value['name'] && $password === $value['password'];});//异常判断try{//异常判断,创建自定义异常类并传入参数if(count($result)!==1)throw new MyException('用户名或者密码错误',101);}catch (MyException $e){echo $e;};}}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号