Blogger Information
Blog 48
fans 0
comment 0
visits 36746
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
use导入命名空间|命名空间中:非限定名称,限定名称和完全限定名称
雨天的博客
Original
1469 people have browsed it

/*
* 命名空间的声明与使用
* 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;
}

运行实例 »

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


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post