Blogger Information
Blog 29
fans 0
comment 0
visits 14893
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
composer、接口与抽象类学习小结
cool442
Original
542 people have browsed it

1. composer

composer 是什么

  • php 包依赖管理工具
  • 包: 组件,一组相关的类,接口,trait 的结合体
  • 依赖: A -> B -> C -> D
  • composer 就是用 php 语言开发的

组件放在了哪里

从哪下载

windows 下载

下载地址:https://getcomposer.org/download/

  • 官网下载: https://getcomposer.org/composer.phar
  • 将 php.exe 所在路径添加到全局 path 变量中
  • 将下载的 composer.phar 复制到 php.exe 所在目录中
  • 创建 composer.bat:@php "%~dp0composer.phar" %*

  • php composer.phar -V

  • 简化成: composer -V
  • 将镜像改为国内阿里云:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

常用指令

  • composer init 创建composer.json配置文件
  • composer install: 安装 composer.json 中的依赖
  • composer update: 更新依赖 与lock文件保持一致
  • composer dump-autoload: 打印自动加载索引
  • composer self-update: 更新 composer 版本
  • composer require: 添加依赖到 composer.json 中
  • composer create-project: 安装项目
  • composer config -l -g 查看composer配置
  • composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 配置中国镜像

composer自动加载 autoload

  • 文件级: “files”, 需要将加载的文件逐个导入
  • 目录级: “classmap”,类目录的映射
  • 空间级: “psr-4”: 命名空间映射到目录
  • 无论是哪一种,最后都要执行一下”composer dump”,更新 composer.json 中的 autoload 配置项

2. 有验证码的登录页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>登录</title>
  8. <style>
  9. div {
  10. width: 10em;
  11. margin: 15% auto;
  12. }
  13. p {
  14. margin: 0.5em 0;
  15. }
  16. input {
  17. width: 100%;
  18. height: 1.8em;
  19. }
  20. #captcha,
  21. img {
  22. width: 46%;
  23. height: 1.8em;
  24. vertical-align: middle;
  25. }
  26. input[type="button"]:hover {
  27. cursor: pointer;
  28. }
  29. span {
  30. display: block;
  31. height: 1.8em;
  32. line-height: 1.8em;
  33. text-align: center;
  34. color: red;
  35. }
  36. </style>
  37. </head>
  38. <?php
  39. session_start();
  40. // 调用验证码包的自动加载文件
  41. require dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
  42. use Gregwar\Captcha\CaptchaBuilder;
  43. // 创建验证码对象
  44. $builder = new CaptchaBuilder;
  45. // 调用方法生成验证码
  46. $builder->build();
  47. ?>
  48. <body>
  49. <div>
  50. <p><input type="text" name="username" id="username" placeholder="输入用户名"></p>
  51. <p><input type="password" name="password" id="password" placeholder="输入密码"></p>
  52. <p>
  53. <input type="text" name="captcha" id="captcha" placeholder="输入验证码" onblur="check_captcha()">
  54. <img src="<?= $builder->inline() ?>" />
  55. </p>
  56. <p><span></span></p>
  57. <p><input type="button" value="登 录" onclick="login()"></p>
  58. </div>
  59. </body>
  60. <script>
  61. async function check_captcha() {
  62. // 获取输入的验证码
  63. let captcha = document.querySelector("#captcha").value;
  64. url = `Request_ContAroller.php?captcha=${captcha}`;
  65. const response = await fetch(url)
  66. response.json().then()
  67. }
  68. </script>
  69. </html>

3.接口与抽象类

  1. <?php
  2. use aDemo as GlobalADemo;
  3. /**
  4. * 接口是定义,类(抽象类)是实现
  5. * interface的目的是建立通用的标准,只有实现了这些标准,才能被认为实现了接口
  6. */
  7. // 为计算机(主程序)扩展功能,计算机官方结出一种公开标准
  8. // 定义USB接口
  9. interface USB
  10. {
  11. // 接口只能定义常量和抽象方法
  12. // 抽象方法,必须是公开的
  13. function run();
  14. }
  15. // 为计算机扩展usb键盘功能,实现usb接口
  16. class usbKey implements USB
  17. {
  18. // 接口中有几个抽象方法都必须在类中实现,否则为抽象类。
  19. function run()
  20. {
  21. return "运行USB键盘";
  22. }
  23. }
  24. class usbMemo implements USB
  25. {
  26. function run()
  27. {
  28. return "运行U盘";
  29. }
  30. }
  31. // 计算机主程序
  32. class computer
  33. {
  34. // 创建使用接口类方法
  35. function useUsb($driver)
  36. {
  37. // 运行接口通用方法
  38. return $driver->run();
  39. }
  40. }
  41. $com = new computer;
  42. echo $com->useUsb(new usbKey);
  43. echo $com->useUsb(new usbMemo);
  44. /**
  45. * 1. 接口中定义的均是公开的抽象方法,类属性不能定义在接口中,类常量可以。
  46. * 2.一个工作类必须将接口中的所有方法按照自己的需求去实现,否则该类要定义成抽象类。
  47. * 3. 抽象类中可以有抽象方法和普通方法,不能被实例化。
  48. */
  49. // 定义接口
  50. interface aDemo
  51. {
  52. const FILM_NAME = "海底总动员";
  53. public static function get_msg(...$msg);
  54. public static function play($a, $b);
  55. }
  56. // 抽象类:没有实现接口中所有的方法,因此为抽象类
  57. abstract class film implements aDemo
  58. {
  59. public static function get_msg(...$msg)
  60. {
  61. return print_r($msg, true);
  62. }
  63. }
  64. // 工作类
  65. class work extends film
  66. {
  67. public static function play($a, $b)
  68. {
  69. return '今日票房:' . $a * $b . '元';
  70. }
  71. }
  72. echo '<br>' . aDemo::FILM_NAME . '<br>';
  73. echo film::FILM_NAME . '<br>';
  74. echo work::FILM_NAME . '<br>';
  75. echo film::get_msg('尼莫', '小鱼', '大海') . '<br>';
  76. echo work::get_msg('尼莫', '小鱼', '大海') . '<br>';
  77. echo work::play(6000, 45);
  78. /**
  79. * php中,类的继承只能是单继承,即类C不能同时继承类A和类B,那么对于对特定类的功能进行拓展,可以use trait,还可以使用接口来实现类似于多方继承的好处,。
  80. * 先继承后实现
  81. * 工作类 extends 普通类(抽象类)implements 接口1,接口2....接口n
  82. */
  83. /**
  84. * oop 三大特性 封装 多态 继承
  85. * 多态性是指同一操作作用于不同类的实例,将产生不同的效果,即不同类的对象收到相同的消息时,得到不同的结果。在PHP中实现多态的方式有2种:通过继承实现多态和通过接口实现多态。多态指的是方法的重写。
  86. */
  87. /**
  88. * 什么时候使用抽象类,接口,trait?
  89. * 1. 如果你想使用模型,为多个紧密想关的对象提供规范,就使用抽象类;如果你想创建一项功能,随后在多个不想管的对象中实现,就使用接口。
  90. * 2. 如果你的对象必须从多个源头继承行为,就使用接口;php中的类可以实现多个接口,但只能继承一个类(抽象类)。
  91. * 3.如果你知道所有类将共享一个方法实现时,就使用抽象类,并在抽象类中实现这个方法。你不能在接口中实现方法。
  92. * 4. 如果所有类都共享一段相同的代码,就使用trait。
  93. *
  94. */
Correcting teacher:PHPzPHPz

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