Blogger Information
Blog 48
fans 0
comment 0
visits 40370
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0906- 细说命名空间
3期-Shawn的博客
Original
782 people have browsed it

1.编程: 用大括号语法实现在一个脚本中创建多个命名空间并访问成员

0906zuoye1.png

实例

<?php
// 用大括号语法实现在一个脚本中创建多个命名空间并访问成员

//如何让全局代码与用户空间代码和平相处?

//1.全局代码:之前我们是用 \ 进行引用的
//2.用户代码:用 namespace  进行标识
//3.用户自定义命名空间,在空间标识符后有一对花括号代码之前的分号,将属于该空间的代码全部放在花括号内
//4.全局空间的代码,使用一个没有标识符的namespace关键字加花括号即可,将全局代码放在这对没有空间标识符的花括号内


namespace
{
  const app = '我是全局命名空间的常量';
}




//声明一个命名空间one
namespace one
{
  class Demo
  {
    public $name = 'Shawn Wang';
    public function demo1()
    {
      return __METHOD__;
    }
  }
  const SITE = 'PHP中文网';
  function add($a,$b)
  {
    return $a+$b;
  }
  echo (new \two\Demo())->name,'<br>';
  echo (new \two\Demo())->demo1(),'<br>';
  echo add(12,88),'<br>';
  echo app,'<br>';//访问全局命名空间下的常量
  echo \two\add(32,88),'<hr>';


  //echo (new \one\Demo())->add(12,88),'<hr>';不明白为何这样会错

}

//声明一个命名空间two
namespace two
{
  class Demo
  {
    public $name = '王先生';
    public function demo1()
    {
      return __METHOD__;
    }
  }
  const SITE = 'www.php.cn';
  function add($a,$b)
  {
    return $a+$b;
  }
  echo (new \one\Demo())->name,'<br>';
  echo (new \one\Demo())->demo1(),'<br>';
  echo add(32,88),'<br>';
  echo \one\add(32,88),'<hr>';
}

//如果执行one空间中的代码
//echo (new \one\Demo())->name,'<br>';
//这样可以吗?貌似可以,但实际不行的
//原因是:如果当前脚本使用了命名空间,那么里面的全部代码都必须使用命名空间进行声明和访问


//声明一个命名空间three
namespace three
{
  echo (new \one\Demo())->name,'<br>';
  echo (new \two\Demo())->name,'<hr>';


}

//声明一个全局空间
namespace {

    echo (new one\Demo())->name,'<br>';
    echo (new \two\Demo())->name,'<hr>';
}

运行实例 »

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

2.编程:使用use 导入其它脚本中的类/常量/函数,并使用别名方式访问

0906zuoye2.png

实例

<?php
//使用use 导入其它脚本中的类/常量/函数,并使用别名方式访问

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


//1. 声明一个命名空间one
namespace one;

//use one\two\three\Demo;
//如果当前类也有一个同名的Demo类,怎么办?为导入的类取一个别名
use one\two\three\Demo as Demo1;

class Demo
{
  public $name='Shawn Wang';
}

const SITE='PHP中文网';

function add($a,$b)
{
  return $a+$b;
}

//在当前空间访问: one\two\three空间中类,必须要添加很长的空间前缀
//echo (new one\two\three\Demo)->name;
echo (new Demo)->name;
echo (new Demo1)->name,'<hr>';



//2.声明命名空间:one\two\three
namespace one\two\three;

class Demo
{
  public $name='';
}

const  DOMAIN = 'www.php.cn';


function add($a,$b)
{
  return $a+$b;
}


namespace test1;
require 'test2.php';
use test2\Test2;//导入类,类的别名默认为Test2。与当前命名空间类名有冲突的话用as


class Test1
{
  public static function demo()
  {
    return __METHOD__;
  }
}


echo Test1::demo(),'<hr>';
echo \test2\Test2::demo(),'<hr>';
echo Test2::demo(),'<hr>';

运行实例 »

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

3. 问答: 非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?

非限定命名称的命名空间:               即当前所在的命名空间

限定名称的命名空间:                      即使用命名空间前缀的命名空间

完全限定名称的命名空间:               即使用命名空间前缀的命名空间,且命名空间前缀是以根空间(全局空间)开始的

Correction status:qualified

Teacher's comments:
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