php的命名空间

定义:命名空间是一种封装事物的方法
为何要用命名空间
    1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
    2、为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。


命名空间语法
    <?php
        namespace App;
        class Test{

        }
    ?>
    一个页面可以定义多个命名空间,但并不建议这么做
    <?php
    //定义子命名空间
    namespace App\Http;
    class Response {
        public function index() {

        }
    }


    namespace App\Http\Controllers;
    class Request() {

    }

    ?>

    注:在页面的开头,第一个namespace声明前面,不能加任何代码,除了delare语法

    大括号写法:
        <?php
            namespace App {
                class Test{
                    public function index() {

                    }
                }
            }

            namespace App\Http {
                class Test{
                    public function index() {

                    }
                }
            }

            //这里没加命名空间名称,表示全局命名空间
            namespace {
                $num = 10;
                for($i = 0;$i<$num;$i++) {
                    echo $i;
                }
            }


使用命名空间:
   1.php
   <?php
   namespace App\Http;
   class Response {
       public static  function test($str=null) {
           $array = array(
               sprintf('访问方式:[%s]',$str),
               sprintf('File:[%s]',basename(__FILE__)),
               sprintf('命名空间:[%s]',__NAMESPACE__),
               sprintf('类名:[%s]',__CLASS__),
               sprintf('方法名:[%s]',__METHOD__),
           );
           echo implode('---',$array),PHP_EOL;
       }
   }
   ?>

   2.php
   <?php
   namespace App\Lib\Http;
   class Response {
       public static  function test($str=null) {
           $array = array(
               sprintf('访问方式:[%s]',$str),
               sprintf('File:[%s]',basename(__FILE__)),
               sprintf('命名空间:[%s]',__NAMESPACE__),
               sprintf('类名:[%s]',__CLASS__),
               sprintf('方法名:[%s]',__METHOD__),
           );
           echo implode('---',$array),PHP_EOL;
       }
   }
   ?>

   test.php
   <?php
   //包含文件
   require '1.php';
   require '2.php';
   //直接使用命名空间调用方法
   App\Http\Response::test('命名空间');
   App\Lib\Http\Response::test('命名空间');
   //输出
   //访问方式:[命名空间]---File:[1.php]---命名空间:[App\Http]---类名:[App\Http\Response]---方法名:[App\Http\Response::test]
   //访问方式:[命名空间]---File:[2.php]---命名空间:[App\Lib\Http]---类名:[App\Lib\Http\Response]---方法名:[App\Lib\Http\Response::test]

   //使用use方式访问
   //use的用处是将类导入进来,然后直接使用类名,就不用写那么长的命名空间了
   use App\Http\Response;
   //访问方法
   Response::test('use');
   //输出
   //访问方式:[use]---File:[1.php]---命名空间:[App\Http]---类名:[App\Http\Response]---方法名:[App\Http\Response::test]

   //use App\Lib\Http\Response;//如果这里也这么写的话,就报错了,提示类名重复定义了,所以这里要做个别名
   use App\Lib\Http\Response as LibResponse;//这样才行
   //访问方法
   LibResponse::test('use');
   //输出
   //访问方式:[use]---File:[2.php]---命名空间:[App\Lib\Http]---类名:[App\Lib\Http\Response]---方法名:[App\Lib\Http\Response::test]


    //注:use和require并不是一个意思,use是基于require文件之后,导入一个类名而已,这俩不能混淆

    //使用系统全局方法,加上一个反斜杠即可
    echo \strlen('123');
    throw new \Exception('oh no!');


   ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值