php 命名空间

  1. 首先阐述一下概念
命名空间: 声明命名空间的代码应该放在<?php 代码后的第一行。
         作用封装和组织相关的php类,类似把相关的文件放在同一目录下一样。
         子命名空间使用 \ 分割。  
         同一空间的所有类没必要写在同一个php文件里。      
         厂商命名空间是最重要的命名空间,是最顶层的命名空间,用于识别品牌或组织,具有全局唯一性。
         使用use 关键字导入代码。

use关键字: 
        use位置在<?php 标签或命名空间之后。
        use必须出现在全局作用域中,不能再类或函数中


全局命名空间: 有些代码没有命名空间,而是在全局命名空间中,使用时要在类、函数、接口、常量前加上 \ 符号 

2.使用示例:

phpadvanced  目录下的TestNamespaced.php类

<?php 
    namespace phpadvanced;

    class TestNamespace
    {
        private static $name="hehe1";

        public static function getName(){
            echo self::$name."<br />";
        }

        public static function setName($name){
            self::$name = $name;
        }
    }
phpadvanced/test  目录下的TestNamespaced.php类

<?php 

    namespace phpadvanced\test;

    require_once "../TestNamespace.php";

    use phpadvanced\TestNamespace as TestNamespace1;

    class TestNamespace
    {
        private static $name="hehe";

        public static function getName(){
            echo self::$name."<br />";
        }

        public static function setName($name){
            self::$name = $name;
        }
    }

    $obj = new TestNamespace();

    $obj->setName("haha2");

    $obj->getName();

    TestNamespace1::getName();

http://192.168.15.233:8088/phpadvanced/test/TestNamespace.php
执行结果:
haha2
hehe1

分析:在不同目录(不同命名空间下)创建相同的类TestNamespace.php,类包含一个私有的静态变量和两个共有的静态方法。
使用require_once 包含文件后,使用use定义命名空间别名。

3.使用示例2

phpadvanced  目录下的TestNamespaced2.php类
<?php 
    namespace phpadvanced;

    require_once "./TestNamespace.php";
    require_once "./test/TestNamespace.php";

    use  phpadvanced\TestNamespace as TestNamespace1;
    use  phpadvanced\test\TestNamespace as TestNamespace11;

    TestNamespace1::setName("haha");
    TestNamespace1::getName();

    TestNamespace11::setName("haha2");
    TestNamespace11::getName();

http://192.168.15.233:8088/phpadvanced/TestNamespace2.php
执行结果:
haha
haha2

  1. 全局命名空间示例
phpadvanced  目录下的TestNamespaced3.php类
<?php 
    namespace phpadvanced;

    class TestNamespace3 
    {
        public function test()
        {
            $exception = new \Exception();
            var_dump($exception);
        }
    }

    $obj = new TestNamespace3();

    $obj->test();

http://192.168.15.233:8088/phpadvanced/TestNamespace3.php
没有在Exception前加 \ 符号 执行结果:

Fatal error: Class 'phpadvanced\Exception' not found in C:\xampp\htdocs\phpadvanced\TestNamespace3.php on line 8

在Exception前 加 \ 符号,执行结果:

object(Exception)#2 (7) {
  ["message":protected]=>
  string(0) ""
  ["string":"Exception":private]=>
  string(0) ""
  ["code":protected]=>
  int(0)
  ["file":protected]=>
  string(46) "C:\xampp\htdocs\phpadvanced\TestNamespace3.php"
  ["line":protected]=>
  int(8)
  ["trace":"Exception":private]=>
  array(1) {
    [0]=>
    array(6) {
      ["file"]=>
      string(46) "C:\xampp\htdocs\phpadvanced\TestNamespace3.php"
      ["line"]=>
      int(15)
      ["function"]=>
      string(4) "test"
      ["class"]=>
      string(26) "phpadvanced\TestNamespace3"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(0) {
      }
    }
  }
  ["previous":"Exception":private]=>
  NULL
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值