Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
下载地址:https://getcomposer.org/download/
创建 composer.bat:@php "%~dp0composer.phar" %*
php composer.phar -V
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登录</title>
<style>
div {
width: 10em;
margin: 15% auto;
}
p {
margin: 0.5em 0;
}
input {
width: 100%;
height: 1.8em;
}
#captcha,
img {
width: 46%;
height: 1.8em;
vertical-align: middle;
}
input[type="button"]:hover {
cursor: pointer;
}
span {
display: block;
height: 1.8em;
line-height: 1.8em;
text-align: center;
color: red;
}
</style>
</head>
<?php
session_start();
// 调用验证码包的自动加载文件
require dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
use Gregwar\Captcha\CaptchaBuilder;
// 创建验证码对象
$builder = new CaptchaBuilder;
// 调用方法生成验证码
$builder->build();
?>
<body>
<div>
<p><input type="text" name="username" id="username" placeholder="输入用户名"></p>
<p><input type="password" name="password" id="password" placeholder="输入密码"></p>
<p>
<input type="text" name="captcha" id="captcha" placeholder="输入验证码" onblur="check_captcha()">
<img src="<?= $builder->inline() ?>" />
</p>
<p><span></span></p>
<p><input type="button" value="登 录" onclick="login()"></p>
</div>
</body>
<script>
async function check_captcha() {
// 获取输入的验证码
let captcha = document.querySelector("#captcha").value;
url = `Request_ContAroller.php?captcha=${captcha}`;
const response = await fetch(url)
response.json().then()
}
</script>
</html>
<?php
use aDemo as GlobalADemo;
/**
* 接口是定义,类(抽象类)是实现
* interface的目的是建立通用的标准,只有实现了这些标准,才能被认为实现了接口
*/
// 为计算机(主程序)扩展功能,计算机官方结出一种公开标准
// 定义USB接口
interface USB
{
// 接口只能定义常量和抽象方法
// 抽象方法,必须是公开的
function run();
}
// 为计算机扩展usb键盘功能,实现usb接口
class usbKey implements USB
{
// 接口中有几个抽象方法都必须在类中实现,否则为抽象类。
function run()
{
return "运行USB键盘";
}
}
class usbMemo implements USB
{
function run()
{
return "运行U盘";
}
}
// 计算机主程序
class computer
{
// 创建使用接口类方法
function useUsb($driver)
{
// 运行接口通用方法
return $driver->run();
}
}
$com = new computer;
echo $com->useUsb(new usbKey);
echo $com->useUsb(new usbMemo);
/**
* 1. 接口中定义的均是公开的抽象方法,类属性不能定义在接口中,类常量可以。
* 2.一个工作类必须将接口中的所有方法按照自己的需求去实现,否则该类要定义成抽象类。
* 3. 抽象类中可以有抽象方法和普通方法,不能被实例化。
*/
// 定义接口
interface aDemo
{
const FILM_NAME = "海底总动员";
public static function get_msg(...$msg);
public static function play($a, $b);
}
// 抽象类:没有实现接口中所有的方法,因此为抽象类
abstract class film implements aDemo
{
public static function get_msg(...$msg)
{
return print_r($msg, true);
}
}
// 工作类
class work extends film
{
public static function play($a, $b)
{
return '今日票房:' . $a * $b . '元';
}
}
echo '<br>' . aDemo::FILM_NAME . '<br>';
echo film::FILM_NAME . '<br>';
echo work::FILM_NAME . '<br>';
echo film::get_msg('尼莫', '小鱼', '大海') . '<br>';
echo work::get_msg('尼莫', '小鱼', '大海') . '<br>';
echo work::play(6000, 45);
/**
* php中,类的继承只能是单继承,即类C不能同时继承类A和类B,那么对于对特定类的功能进行拓展,可以use trait,还可以使用接口来实现类似于多方继承的好处,。
* 先继承后实现
* 工作类 extends 普通类(抽象类)implements 接口1,接口2....接口n
*/
/**
* oop 三大特性 封装 多态 继承
* 多态性是指同一操作作用于不同类的实例,将产生不同的效果,即不同类的对象收到相同的消息时,得到不同的结果。在PHP中实现多态的方式有2种:通过继承实现多态和通过接口实现多态。多态指的是方法的重写。
*/
/**
* 什么时候使用抽象类,接口,trait?
* 1. 如果你想使用模型,为多个紧密想关的对象提供规范,就使用抽象类;如果你想创建一项功能,随后在多个不想管的对象中实现,就使用接口。
* 2. 如果你的对象必须从多个源头继承行为,就使用接口;php中的类可以实现多个接口,但只能继承一个类(抽象类)。
* 3.如果你知道所有类将共享一个方法实现时,就使用抽象类,并在抽象类中实现这个方法。你不能在接口中实现方法。
* 4. 如果所有类都共享一段相同的代码,就使用trait。
*
*/