Blogger Information
Blog 46
fans 2
comment 0
visits 19480
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
写一个类的自动加载器 2. 预习PDO基本知识,与常用的SQL语句
P粉314265155
Original
299 people have browsed it

继承

  1. <?php
  2. // php默认是单继承
  3. // 项目不大, 不想用接口实现多继承
  4. // 又不想用父类,子类这样的继承方式来增加项目复杂度
  5. // 可以试这个"迷你"版的基类, trait
  6. // trait 可以看成是一个通用组件库,
  7. // trait 插入到任何一个类中, 来扩展这个类的功能
  8. // insteadOf 用在 trait 中解决 命名冲突
  9. // trait 一个特殊的类
  10. namespace _0816;
  11. // 1、经典单继承
  12. class A {
  13. public static function hello(){
  14. return __METHOD__.'我是A类方法'.'<hr>';
  15. }
  16. }
  17. class B extends A {
  18. }
  19. echo B::hello();
  20. // B的类名
  21. echo B::class;
  22. echo '<hr>';
  23. echo call_user_func([B::class,'hello']);
  24. echo '<hr>';
  25. // 2、接口简介实现了多继承
  26. interface iA {
  27. public static function hello ();
  28. }
  29. interface iB {
  30. public static function world();
  31. }
  32. class W implements iA, iB{
  33. public static function hello()
  34. {
  35. return __METHOD__.'我是w里面的A的方法';
  36. }
  37. public static function world(){
  38. return __METHOD__.'我是w里面的B的方法';
  39. }
  40. }
  41. echo call_user_func([W::class,'hello' ]).'<hr>';
  42. echo call_user_func([W::class,'world' ]).'<hr>';
  43. // 3、trait
  44. trait tA{
  45. public static function sex(){
  46. return __METHOD__.'我是TA的sex方法';
  47. }
  48. }
  49. trait tB{
  50. public static function email(){
  51. return __METHOD__.'我是TB的sex方法';
  52. }
  53. }
  54. class tC {
  55. use tA;
  56. use tB;
  57. }
  58. echo call_user_func([tC::class,'sex' ]).'<hr>';
  59. echo call_user_func([tC::class,'email' ]).'<hr>';
  60. echo'<hr>';
  61. // trait 的优先级
  62. // 父类parent < trait <子类
  63. class tG {
  64. public static function hello(){
  65. return __METHOD__.'我是 tD的hello方法';
  66. }
  67. }
  68. trait tJ{
  69. public static function hello(){
  70. return __METHOD__.'我是TJ的hello方法';
  71. }
  72. }
  73. class tH extends tG {
  74. use tJ;
  75. public static function hello(){
  76. return __METHOD__.'我是 TH 的hello方法';
  77. }
  78. use tJ;
  79. }
  80. echo call_user_func([tH::class,'hello' ]).'<hr>';
  81. echo '<hr>';
  82. // // 5. trait 命名冲突
  83. trait t2 {
  84. public static function hello(){
  85. return __METHOD__.'我是t2的hello方法';
  86. }
  87. }
  88. trait t1 {
  89. public static function hello(){
  90. return __METHOD__.'我是t1的hello方法';
  91. }
  92. }
  93. trait W3 {
  94. use t2,t1 {
  95. t2::hello as t3;
  96. t1::hello insteadOf t2;
  97. }
  98. }
  99. echo call_user_func([W3::class,'hello' ]).'<hr>';
  100. echo '<hr>';
  101. // 6. trait 优化
  102. trait t3 {
  103. public static function hello(){
  104. return __METHOD__.'我是t3的hello方法';
  105. }
  106. }
  107. trait t4 {
  108. public static function world(){
  109. return __METHOD__.'我是t4的world方法';
  110. }
  111. }
  112. trait t5{
  113. public static function sex(){
  114. return __METHOD__.'我是t5的 sex方法';
  115. }
  116. }
  117. trait t6 {
  118. public static function age(){
  119. return __METHOD__.'我是t6的age方法';
  120. }
  121. }
  122. // 简化
  123. trait importALL {
  124. use t3;
  125. use t4;
  126. use t5,t6;
  127. }
  128. trait W4 {
  129. // use t3;
  130. // use t4;
  131. // use t5,t6;
  132. use importALL ;
  133. }
  134. echo call_user_func([W4::class,'hello' ]).'<hr>';
  135. echo call_user_func([W4::class,'world' ]).'<hr>';
  136. echo call_user_func([W4::class,'sex' ]).'<hr>';
  137. echo call_user_func([W4::class,'age' ]).'<hr>';
  138. echo '<hr>';

自定加载器

  1. <?php
  2. // 自动加载器
  3. // namespace thinkPHP ;
  4. namespace admin;
  5. // 查看命名空间名称
  6. echo __NAMESPACE__;
  7. echo '<hr>';
  8. // 当前空间的引用
  9. // echo namespace;
  10. class A {
  11. }
  12. // new A();或者 namesapce ==tinkPHP 当前空间的引用
  13. new namespace\A();
  14. // 访问三个控制器 Demo1 Demo2 Demo 3 的 hello 方法
  15. // 加载 Demo1
  16. // require __DIR__.'/admin/controller/Demo1.php';
  17. // // 加载 Demo2
  18. // require __DIR__.'/admin/controller/Demo2.php';
  19. // // 加载 Demo3
  20. // require __DIR__.'/admin/controller/Demo3.php';
  21. //----------------------------------------------------------
  22. // 自动加载器
  23. // 为了实现自动加载,应该遵循一些约定
  24. // 1. 一个文件只有一个类
  25. // 2. 这个类名和文件名必须一致
  26. // 3. 这个类的命名空间,必须映射到类文件所在的路径
  27. // 函数注册
  28. // spl_autoload_register(function ($class) {
  29. // echo $class.'<hr>';
  30. // $path = str_replace('\\',DIRECTORY_SEPARATOR,$class);
  31. // // 增加判断 文件是否存在
  32. // $file =$path .'.php';
  33. // if(file_exists( $file)){
  34. // require $path . '.php';
  35. // }else{
  36. // echo '文件不存在';
  37. // }
  38. // });
  39. // 输出 Demo1 方法 完全限定名称:绝对路径
  40. // echo \admin\controller\Demo1::hello().'<hr>';
  41. // 限定名称:相对路径 命名空间名称变为admin 前面的admin可以省略
  42. echo controller\Demo1::hello().'<hr>';
  43. // 进一步简化
  44. // 别名 :从完全限定名称写起
  45. // use
  46. // 非限定名称 默认从全局开始 admin前面的 \ 可以省略 全局空间标识符可以不写
  47. use \admin\controller\Demo2;
  48. echo Demo2::hello();
  49. // 输出 Demo2 方法
  50. // echo \admin\controller\Demo2::hello().'<hr>';
  51. // 输出 Demo3 方法
  52. // echo \admin\controller\Demo3::hello().'<hr>';

自动加载器2

  1. <?php
  2. namespace admin;
  3. require 'autoloader.php';
  4. use admin\controller\Demo1;
  5. echo Demo1::hello();

自动加载器的 引用

引用1

  1. <?php
  2. // 为了实现自动加载,应该遵循一些约定
  3. // 1. 一个文件只有一个类
  4. // 2. 这个类名和文件名必须一致
  5. // 3. 这个类的命名空间,必须映射到类文件所在的路径
  6. namespace admin\controller;
  7. class Demo1 {
  8. public static function hello(){
  9. return __METHOD__;
  10. }
  11. }

引用2

  1. <?php
  2. // 为了实现自动加载,应该遵循一些约定
  3. // 1. 一个文件只有一个类
  4. // 2. 这个类名和文件名必须一致
  5. // 3. 这个类的命名空间,必须映射到类文件所在的路径
  6. namespace admin\controller;
  7. class Demo2 {
  8. public static function hello(){
  9. return __METHOD__;
  10. }
  11. }

引用3

  1. <?php
  2. // 为了实现自动加载,应该遵循一些约定
  3. // 1. 一个文件只有一个类
  4. // 2. 这个类名和文件名必须一致
  5. // 3. 这个类的命名空间,必须映射到类文件所在的路径
  6. namespace admin\controller;
  7. class Demo3 {
  8. public static function hello(){
  9. return __METHOD__;
  10. }
  11. }

数据库 操作 见下一作业

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!