21.php命名空间

    命名空间是对工程和类管理的一种替代解决方式,本质上是是语言设计缺陷大规避,目的是为了工程的方便管理和防止同名类的加载。

    我们不使用命名空间,并引入另外一个文件,我创建了三个文件待用,main.php,lib1.php,lib2.php

<?php
/* 
 * filename ./main.php 
 * 
 *  */
/* namespace main; */
require_once './lib1.php';

class Outputer{
    static function output() {
        echo __FILE__;
    }
}

Outputer::output();

<?php
/* 
 * filename lib1.php
 *  
 *  */
//namespace lib1;

class Outputer{
    static function output() {
        echo __FILE__;
    }
}
    会出这样的警告,错误原因就是在全局空间中有两个完全一样的类。

    我们放开上面namesapce的注释就不会再有问题。

    对于命名空间的使用我们往往是根据文件的某一路径写成\PATH\TO\FILENAME。

    下面说一下命名空间类之间的调用问题

    直接使用本域中的类

<?php
/* 
 * filename ./main.php 
 * 
 *  */
namespace main; 
require_once './lib1.php';

class Outputer{
    static function output() {
        echo __FILE__;
    }
}

Outputer::output();

     使用被引用命名空间中的类 

<?php
/* 
 * filename ./main.php 
 * 
 *  */
namespace main; 
require_once './lib1.php';

class Outputer{
    static function output() {
        echo __FILE__;
    }
}

\lib1\Outputer::output();
    明确告诉解释器,我要使用的域,这在搜索域特别长的时候很有效。

<?php
/* 
 * filename ./main.php 
 * 
 *  */
namespace main; 
require_once './lib1.php';

class Outputer{
    static function output() {
        echo __FILE__;
    }
}

use lib1\Outputer;
Outputer::output();
    这时候会出错,回到老问题上去了。

    我们要使用别名来解决:

<?php
/* 
 * filename ./main.php 
 * 
 *  */
namespace main; 
require_once './lib1.php';

class Outputer{
    static function output() {
        echo __FILE__;
    }
}

use lib1\Outputer as lOutputer;
lOutputer::output();

    在lib2.php文件中并没有使用命名空间。现在我们要访问。


<?php
/*
 * filename lib2.php
 *
 *  */
class Outputer{
    static function output() {
        echo __FILE__;
    }
}

    在访问之前加一个反斜杠就可以了

<?php
/* 
 * filename ./main.php 
 * 
 *  */
namespace main; 
require_once './lib1.php';

class Outputer{
    static function output() {
        echo __FILE__;
    }
}

use lib1\Outputer as lOutputer;
lOutputer::output();

require_once 'lib2.php';
\Outputer::output();

    当然一个文件中可以使用多个命名空间,使用namespace SPACENAME{....}就可以创建 ,但是通常我们不会这么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值