命名空间类名三种引用-命名冲突解决-自动加载-数据库操作

2021年02月24日 00:37:14阅读数:53博客 / 葡萄枝子 / PHP

命名空间类名三种引用-命名冲突解决-自动加载-数据库操作

  1. 实例演示通过空间引用类的三种方式;
  2. 类的别名引入与命名冲突的解决方案是什么?
  3. 写一个自动加载类;
  4. 将课堂提到的数据库操作命令全部上机做一遍,选择一些你认为有意思 很重要的发布到博客作业中…

1. 实例演示通过空间引用类的三种方式;

  • 非限定名称:当前路径,类名前无空间前缀
  • 限定名称:相对路径,类名前非全局开始的空间前缀
  • 完全限定名称:绝对路径,类名前全局开始的空间前缀
  1. // 实例演示通过空间引用类的三种方式
  2. namespace Ns {
  3. class Demo
  4. {
  5. }
  6. // 非限定名称:当前路径,类名前无空间前缀
  7. // Ns\Demo
  8. echo Demo::class, '<br>';
  9. // 限定名称:相对路径,类名前非全局开始的空间前缀
  10. // Ns\Ns2\Demo
  11. echo Ns2\Demo::class, '<br>';
  12. // 完全限定名称:绝对路径,类名前全局开始的空间前缀
  13. // Ns2\Demo
  14. echo \Ns2\Demo::class, '<br>';
  15. }
  16. namespace Ns\Ns2 {
  17. class Demo
  18. {
  19. }
  20. }
  21. namespace Ns2 {
  22. class Demo
  23. {
  24. }
  25. }*

类名三种引用

2. 类的别名引入与命名冲突的解决方案是什么?

  • 使用别名

  • 新建两个 php 文件,0223-1.php 0223-2.php

  1. // 0223-1.php
  2. namespace Ns1 {
  3. // 导入 Ns2
  4. require '0223-2.php';
  5. // 使用别名区别当前空间同名的类名
  6. use \Ns2\Demo as Demo2;
  7. class Demo
  8. {
  9. public $file = '0223-1.php';
  10. }
  11. // 当前空间类
  12. // 0223-1.php
  13. echo (new Demo)->file, '<br>';
  14. // 导入的空间类
  15. // 0223-2.php
  16. echo (new Demo2)->file, '<br>';
  17. }
  1. // 0223-2.php
  2. namespace Ns2 {
  3. class Demo
  4. {
  5. public $file = '0223-2.php';
  6. }
  7. }
  • 运行 0223-1.php

命名冲突解决

3. 写一个自动加载类;

  • 新建 autoloader.php
  1. // 类自动加载器
  2. spl_autoload_register(function ($class) {
  3. $path = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
  4. if (!is_file($path)) {
  5. throw new \Exception($class);
  6. }
  7. require_once $path;
  8. });
  • 新建目录 Ns2 复制 0223-2.php 改为和类名相同的 Demo.php,适配类名空间自动加载的目录结构

  • 0223-1.php 注释导入的 0223-2.php 修改为导入自动加载器 autoloader.php

  1. // 0223-1.php
  2. namespace Ns1 {
  3. // 导入 Ns2
  4. // require '0223-2.php';
  5. require 'autoloader.php';
  6. // 使用别名区别当前空间同名的类名
  7. use \Ns2\Demo as Demo2;
  8. class Demo
  9. {
  10. public $file = '0223-1.php';
  11. }
  12. // 当前空间类名
  13. // 0223-1.php
  14. echo (new Demo)->file, '<br>';
  15. // 导入的空间类名
  16. // 0223-2.php
  17. echo (new Demo2)->file, '<br>';
  18. }
  • 运行刷新 0223-1.php 图效果不变

自动加载器

4. 将课堂提到的数据库操作命令全部上机做一遍,选择一些你认为有意思 很重要的发布到博客作业中…

  1. -- 创建数据库 phpedu
  2. create database phpedu collate utf8mb4_unicode_ci;
  3. -- 删除数据库 test
  4. drop database test;
  5. -- 创建数据表 staffs
  6. create table staffs(
  7. id int unsigned auto_increment not null primary key comment 'ID',
  8. name varchar(20) not null comment '姓名',
  9. gender enum('male', 'female') not null comment '性别',
  10. email varchar(120) not null comment '邮箱',
  11. birthday date not null comment '生日',
  12. create_at timestamp not null default current_timestamp comment '创建时间',
  13. update_at timestamp not null default current_timestamp on update current_timestamp comment '更新时间'
  14. ) engine = innodb auto_increment=1 collate=utf8mb4_unicode_ci;
  15. -- 删除数据表 test
  16. drop table test
  17. -- 查看建表语句 staffs
  18. show create table staffs
  19. -- 查看数据表
  20. show tables
  21. -- 查看表结构 staffs
  22. desc staffs
  23. -- 添加表字段 salary
  24. alter table staffs add salary int unsigned not null default 2000 after gender;
  25. -- 修改表字段 salary
  26. alter table staffs change salary salary float not null default 1760 after gender;
  27. -- 删除表字段 test
  28. alter table staffs drop test;
  29. -- 表插入数据
  30. insert staffs (name, gender, salary, email, birthday) values
  31. ('张三', 'male', 5000.00, 'a@b.cc', '1980-01-01'),
  32. ('李四', 'female', 9999.99, 'b@a.cc', '1990-12-31');
  33. -- 子查询插入(数据全复制插入)
  34. insert staffs (name, gender, salary, email, birthday) select name, gender, salary, email, birthday from staffs;

数据库操作

批改状态:合格

老师批语:

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    葡萄枝子
    博文
    45
    粉丝
    1
    评论
    0
    访问量
    4297
    积分:0
    P豆:90