博客列表 >use导入命名空间|命名空间中:非限定名称,限定名称和完全限定名称

use导入命名空间|命名空间中:非限定名称,限定名称和完全限定名称

雨天的博客
雨天的博客原创
2018年09月10日 14:56:471477浏览

/*
* 命名空间的声明与使用
* 1.使用关键字:namespace
* 2.php5.3+
* 3.namespace 之前不能有除了declare和注释之外的任何代码,html也不行
* 4.命名空间默认从全局开始定位,全局空间用\表示,类似于根目录
* 5.如果当前脚本声明了命名空间,则所有成员的访问,就必须使用命名空间,包括系统函数
*/

实例

<?php

/*
 * 1.声名一个命名空间:test 下创建 demo1类 get() 函数
 */

namespace test;
class demo1{
    function show()
    {
        return '这是test命名空间下demo1类的show方法';
    }
    const TEYP = 'PHP';

}
function get()
{
    return  'test下面的get方法';
}


/*
 * 2.一个脚本中创建多个命名空间:test1 下也创建 demo1类 get() 函数
 */

namespace test1;
class demo1{
    function show()
    {
        return '这是test1命名空间下demo1类的show方法';
    }
    const TEYP = 'javascript';

}
function get()
{
    return  'test1下面的get方法';
}
//默认输出当前空间的内容
echo '默认输出当前test1空间的show()方法'.(new demo1())->show().'<br>';
echo get(),'<br>';

//当前空间
echo '当前的命名空间:'. __NAMESPACE__.'<br>';
//也可以带上当前的命名空间来访问当前空间代码
$namespace = __NAMESPACE__.'\demo1';
echo (new $namespace)->show().'<br>';

//输出test空间下的的内容,带上\从根目录开始
// 专业术语:完全限定名称
echo \test1\get().'<br>';
echo demo1::TEYP,'<hr>';

/*
 * 3.跨空间访问代码:跨空间访问和跨目录访问文件是一样的,都要带上完整的空间路径
 */
echo \test\demo1::TEYP.'<br>';
echo \test\get().'<br>';
echo \test\demo1::class.'<br>';
echo (new \test\demo1())->show().'<hr>';
echo namespace\get().'<br>';

/*
 * 4.在命名空间的脚本中,如何访问系统预定的函数?
 * 例如声明一个变量 $string;
 */
$string = '北京欢迎你!';
print_r($string);
\print_r($string);
echo '<hr>';
//之前我们说过在空间里访问全局空间的代码要加\,这里没有加为什么可以?
//因为如果用户没有\,计算机首先会在本空间查找var_dump()函数,如果没有找到就会去全局空间查找,所以不报错;
//如果用户在当前空间也创建了一个var_dump()函数,则只会执行本空间定义的,不会执行系统预定义的
function print_r($string)
{
   echo $string;
}
 print_r('这是test1空间的print_r函数');
echo '<hr>';

//事实上2个完成的调用语句应该这样写
\print_r($string);//系统预定义函数
echo '<br>';
\test1\print_r('test1空间的print_r函数');

运行实例 »

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

/*
* 如何让全局代码和用户自定义命名空间的代码和平共处
* 1.全局代码:之前我用/表示
* 2.用户代码:用namespace进行标识
* 3.用户自定义命名空间:空间标识符后又一对花括号,属于该空间的代码都放里面
* 4.全局空间代码:使用一个没有标识符namespace 关键字后面跟一对花括号即可,将代码放在这对没有标识符的括号里面
*
*/

实例

<?php

//声名一个命名空间test3
namespace test3{
    class demo2
    {
        const HOST = '127.0.0.1';

    }
    function set()
    {
        return 'test3\set方法';
    }
}
//如果当前脚本使用了命名空间,那么里面的代码必须使用命名空间进行声名和访问
// echo (new \test3\demo2())->name;//不能访问
//声名一个命名空间test4
namespace test4{
    class demo2
    {
        const HOST = 'localhost';
        public $name='php';

    }
    function set()
    {
        return 'test4\set方法';
    }

    //在test4空间如果访问test3空间的代码是不可以的
    //echo (new \test3\demo2())->name;
    echo (new demo2())->name.'<br>';
}
//全局命名空间
namespace {
    //默认全局全局空间,不用加\
    echo test3\demo2::HOST.'<br>';
    echo test4\set().'<br>';
}

运行实例 »

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

/**
* 命名空间的分层管理
* 非限定名称:空间成员名称前不适用空间前缀,类似当前目录访问
*/

实例

<?php
namespace test;
class demo1{
    function show()
    {
        return '这是test命名空间下demo1类的show方法';
    }
    const TEYP = 'PHP';
    public $name='php';
}
function get()
{
    return  'test下面的get方法';
}
//非限定名称:
echo get().'<br>';
//限定名称:类似相对路径 自动添加前缀test
echo '限定名称:'.(new test1\demo1)->name,'<br>';

//声名一个命名空间test1 为test的子类
namespace test\test1;
class demo1{
    function show()
    {
        return '这是test命名空间下demo1类的show方法';
    }
    const TEYP = 'PHP';
    public $name='php';
}
function get()
{
    return  'test下面的get方法';
}
//完全限定名称:相当于绝对路径
echo (new \test\demo1())->show();

运行实例 »

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

/**
* 使用别名导入命名空间
* 使用关键字use
*/

实例

<?php
namespace test;
//别名导入子命名空间
use test\one\model as model;
//别名导入子命名空间下的类
use test\view\demo4 as demo;

class demo4{
    public $name = 'php中文网';
    const TYPE = 'string';
}
function add($a,$b)
{
    return $a+$b;
}
echo 'test空间下的方法:'.add(20,30);
echo 'test\one\model空间下的类属性:'.(new model\demo4())->name.'<br>';
echo 'test\one\model空间下add方法:'.model\add(10,15).'<br>';
echo 'test\view空间下类的常量:'.demo::TYPE;
//声名一个子命名空间
namespace test\one\model;
class demo4{
    public $name = 'mysql';
    const TYPE = 'int';
}
function add($a,$b)
{
    return $a*$b;
}
namespace test\view;
class demo4{
    public $name = 'javascript';
    const TYPE = 'varchar';
}
function add($a,$b)
{
    return $a/$b;
}

运行实例 »

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


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