博主信息
博文 48
粉丝 0
评论 0
访问量 49260
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
0906- 细说命名空间
3期-Shawn的博客
原创
969人浏览过

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. 问答: 非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?

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

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

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

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学