找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 606|回复: 0

命名空间

[复制链接]

296

主题

38

回帖

1272

积分

管理员

积分
1272
发表于 2021-4-22 12:43:57 | 显示全部楼层 |阅读模式
1、命名空间
  1. <?php
  2. // 声明命名空间 test
  3. namespace test;

  4. class A
  5. {
  6.         public function __construct()
  7.         {
  8.                 echo __METHOD__ . '<br>';
  9.         }
  10. }

  11. new A();


  12. // 声明命名空间 temp
  13. namespace temp;

  14. class A
  15. {
  16.         public function __construct()
  17.         {
  18.                 echo __METHOD__ . '<br>';
  19.         }
  20. }

  21. new A();


  22. // 在同一个文件声明两个命名空间是绝不提倡的!!
复制代码
2.命名空间约束的内容
  1. <?php

  2. // 命名空间之前不能出现任何代码
  3. // 注意标签顶头写
  4. namespace test;

  5. interface Pro
  6. {

  7. }

  8. CONST HOST = 'localhost';

  9. class Project
  10. {

  11. }


  12. function myfun()
  13. {
  14.         echo 'run:myfun';
  15. }

  16. var_dump(HOST);

  17. // 变量,不受命名空间的约束。
  18. // define(); 这个是全局的,不受命名空间影响

  19. $sb = '杰哥';
  20. var_dump($sb);

  21. namespace temp;

  22. var_dump($sb);
复制代码
3.命名空间的基本使用
  1. <?php
  2. require './test.php';
  3. require './example.php';

  4. // 在同一个命名空间不允许,重复定义!
  5. new Controller\User();
复制代码
4.定义子命名空间
  1. <?php

  2. namespace Foo\Sub\Son;

  3. CONST OK = 200;

  4. class Func
  5. {

  6. }


  7. new Func();

  8. var_dump(OK);
复制代码
5.非限定名称
  1. <?php
  2. /*
  3. 1. 非限定名称,即不包含前缀的类名。
  4. 2. 限定名称,或包含前缀的名称。
  5. 3. 完全限定名称,包含了全局前缀操作符的名称。

  6. */

  7. namespace Model;

  8. class Foo
  9. {
  10.         public function __construct()
  11.         {
  12.                 echo __METHOD__ . '<br>';
  13.         }
  14. }

  15. // 当前命名空间是 Model , new Foo() 被解析为 Model\Foo,默认使用了当前的命名空间去解释一个类的,这种称为非限定名称。
  16. $foo = new Foo();

  17. $mi = new \MySQLi('localhost', 'root', 'jiege', 'test');
  18. var_dump($mi);

  19. // 调用了 Model/MySQLi
  20. $mi = new MySQLi('localhost', 'root', 'jiege', 'test');
复制代码
6.命名空间-基础
  1. <?php
  2. /*
  3. 1. 非限定名称,即不包含前缀的类名。
  4. 2. 限定名称,或包含前缀的名称。
  5. 3. 完全限定名称,包含了全局前缀操作符的名称。

  6. */

  7. namespace Model\Sub;
  8. class Tmp
  9. {
  10.         public function __construct()
  11.         {
  12.                 echo __METHOD__ . '<br>';
  13.         }
  14. }


  15. namespace Model;
  16. class Foo
  17. {
  18.         public function __construct()
  19.         {
  20.                 echo __METHOD__ . '<br>';
  21.         }
  22. }

  23. // 调用一个类,可以添加前缀。
  24. // 限定名称(相对路径),就是,在调用一个类,指定了前缀。
  25. $tmp = new Sub\Tmp();
  26. // 完全限定名称(绝对路径)
  27. $fo = new \Model\Foo();
  28. // 从根出发选择类
  29. $temp = new \Model\Sub\Tmp();
复制代码
8.根命名空间的认识
  1. <?php
  2. namespace A\B\C;

  3. // 声明与系统函数同名的函数名
  4. function strlen()
  5. {
  6.         echo 'strq23';
  7. }

  8. // 系统函数,获取字符串的长度
  9. // echo strlen('host');

  10. \A\B\C\strlen();

  11. echo \strlen('sbp');
复制代码
9.继承时从根出发
  1. <?php
  2. namespace A\B\C;

  3. // class MySQLi extends \MySQLi
  4. // {

  5. // }

  6. // new MySQLi();
复制代码
10.自动加载
  1. <?php

  2. // 自动加载

  3. /*
  4. 在 7.2 之后启用。
  5. function __autoload()
  6. {

  7. }
  8. */

  9. // 注册自动加载
  10. spl_autoload_register('autoload');

  11. // 自动加载函数
  12. // 调用时机: 当类不存在的时候,自动调用.
  13. function autoload($className)
  14. {
  15.         require $className . '.php';
  16. }

  17. class A
  18. {
  19. }

  20. $a = new A();
  21. var_dump($a);

  22. $b = new B();
复制代码
demo
  1. <?php
  2. namespace Controller;

  3. class Users
  4. {
  5.         public function __construct()
  6.         {
  7.                 echo __METHOD__ . '<br>';
  8.         }
  9. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|外汇论坛 ( 粤ICP备16021788号 )

GMT+8, 2024-5-10 21:27 , Processed in 0.071111 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表