博客列表 >命名空间访问与利用use导入命名空间的方法与原理分析_2018年9月6日

命名空间访问与利用use导入命名空间的方法与原理分析_2018年9月6日

PHP学习
PHP学习原创
2018年09月11日 21:22:45951浏览

实例

<?php
/**
 * 命名空间的作用:代码复用
 * 我们学习编程的终级目标就是实现代码的复用
 * 为什么要使用命名空间?
 * 1、类,函数,常量都是全局有效,包括在函数中也是可以直接使用的。
 * 2、因此,在全局中不允许有重名的类,函数和常量。
 * 3、如果想从外部导入一个函数库或者类库,他们的名和类名极有可能与当前的脚本冲突。
 * 4、所以,必须要有一套对于工作用的全局范围内的脚本成员,进行标识符名冲突的处理机制。
 * 5、然而命名空间就是这样的一套解决方法机制。他不公可以让用户在全局成员中起到一个较短的名称,又解决了第三方资源引入带来的重名问题。
 * 6、在没有使用任何命名空间的情况下,所有类,常量 ,函数全部声明在全局空间,用\表,现在我们在他们之前加上反斜线\之外,你会发现,执行是正确的。
 * 7、在声明类、常量、函数的时候,前面不用加\,调用的时候才需要加。
 * 命名空间非常的重要,如果不能够掌握,将成为以后学习的最大障碍。
 *
 */
//声明,类,常量,函数

class Demo
{
    public $name='peter zhu';
}
//2.声明一个常量
const SITE='PHP中文网';

//声明一个函数
function add($a,$b)
{
    return $a+$b;
}

//二、全局访问
//实例化类并访问成员

echo (new Demo())->name;

//访问常量
echo SITE;

//访问函数
echo add(3,4);

//以上是声明访问的时候不用在前面加‘\’线

//下面我们在函数的内部访问
function text()
{
    echo (new Demo())->name;//这种情况,如果不在Demo前面加'\'就不会执行。

    //访问常量
    echo SITE;

    //调用函数
    echo add(10,20);

}
text();

//在全局中不允许重复声类,常量和函数。

//class Demo{}//声明一个跟上面一样的类,就会提示错误
//define('SITE','PHP中文网');//声明一个常量,跟上面的常量重复了,也会提示不能错误
//function add(){}//声明一个函数,也跟上面的重复了,也会提示错误


//以上这几种总结,就很明显的把上面对于不能重复的声明类,函数,常量 做了一个总结,下面我们利用命名空间来解决这个问题。

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

<?php
/**
 * 命名空间的使用与访问方法
 * 1、声明命名空间的关键字:namespace
 * 2、命名空间支持php5.3+
 * 3、命名空间上面不能够有任何的代码,包括HTML代码,只能有注释在前面
 * 4、命名空间默认是全局开始的排定位,全局空间用\表示,类似于根目录
 * 5、如果当前脚本中声明了命名空间,则所有的成员的访问,就必须使用命名空间,包括系统函数。
 */
//声明一个命名空间
namespace one;

class Demo
{
    public $name = 'peter zhu';
}
const SITE='PHP中文网';
function add($a,$b)
{
    return $a+$b;
}

//如果我想声明一个同名的类,函数,常量可以再声明一个全部空间

namespace two;

//现在我们声明了一个命名空间,现在我们在来声明一个同名的类,函数,常量就不会出现错误了

class Demo
{
    public $name = '朱老师';
}
define('SITE','php中文网');
function add($a,$b)
{
    return $a+$b;
}

echo (new Demo())->name;//默认输出的当前空间的

echo '当前命名空间是:'.__NAMESPACE__;

$className = __NAMESPACE__.'\Demo';

echo (new $className())->name;

//以上是访问的当前的命名空间的内容

echo (new \one\Demo())->name;//这句话的意思是,输出在one这个命名空间下面的name,如果不加就是输出two下面的name

//下面我们来测试一下,命名空间中的系统变量,如果系统中同名的函数不会被调用。
function print_r($art)
{
    echo '当前空间的的函数是'.$art;
}
echo '<hr>';
$welcone = 'PHP中文网欢迎你!';
print_r($welcone);//等同于调用方法
echo '<hr>';
\two\print_r($welcone);
//通过上上面的在命名空间下声明的名称与系统自带的的名字给重复了,但是,只要在命名空间下面,也可以正常的使用,这就是命名空间的一个好处。

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

<?php
/**
 * 全局空间代码与用户空间代码的和平共处
 * 1、全局代码,之前我们是用\来进行引用的
 * 用户代码用namespace进行标识
 * 用户自定义的命名空间,在空间标识符后面有一对花括号之前有分号将属于该空间的代码全部放到花括号里面
 * 全局空间的代码,使用一个没有标识符的namespace关键字加花括号即可。将全局代码放到这对没有空间标识的花括号内
 *
 */

//声明一个全部空间one

namespace one {
class Demo
{
    public $name = 'PHP中文网';
}
const SITE= 'peter zhu';
function add($a,$b)
{
    return $a+$b;
}
}

//以上是传统的声明命名空间的方法,现在是要将声明的命名空间放到一对花括号里面。
//下面我们再声明一个命名空间two
namespace two
{
    class Demo
    {
        public $name = 'PHP学习网';
    }
    define('SITE','朱老师');
    function add($a,$b)
    {
        return $a+$b;
    }
}

//如果执行one空间中的代码?
namespace {echo (new one\Demo())->name;

//如果要执行指定命名空间下面的一个类或函数,常量 就可使用namespace{}将要执行的空间放到花括号里面,然后使用命名空间的方法前面不要加‘\’线,

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

<?php
/**
 * 使用use关键词来导入命名空间与给命名空间起一个别名
 */
//首先我们声明一个命名空间one

namespace one;

//下面我们导入一个命名空间然后给起一个别名

use one\two\Demo as Demo1;//取别名的意思主要在于,如果导入两个命名空间遇到同名的类。

class Demo
{
    public $name = 'PET朱';
}
const SITE = 'PHP中文网';
function add($a,$b)
{
    return $a+$b;
}

echo (new two\Demo())->name;

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议