php 命名空间(要求php5.3以上)
要求php5.3以上
<?php
namespace test;
// 命名空间与目录类似功能,也可定义子命名空间,用分层的方式定义:
/*
namespace mydir\ok\project;
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:
*/
const OK = 100;
class tclass {
}
function tfunction()
{
}
// 类,函数,常量受命名空间影响,必须在所有代码之前声明命名空间
// 可以在同一个文件中定义多个命名空间(不建议),有两种方式,第一种[不推荐]:
<?php
namespace myproject;
const CONN = 1;
class myclass {}
function myfunction(){}
namespace AntherProject;
const CONN_2 = 100;
class Myclass2{}
function myfunction2(){}
?>
<?php
// 第二种定义多个命名空间,大括号方法
namespace MyProject{
const CONN = 1;
class myclass{}
function myfunction(){}
}
namespace AnotherProject{
const CONN = 2;
class myclass2{}
class myfunction(){}
}
?>
<?php
// 将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来,例如:
namespace MyProject{
const CON = 1;
class MyClas{}
function myfunction(){}
}
// 以下为全局代码
namespace{
session_start();
$a = MyProject\myfunction();
echo MyProject\Connect::start();
}
?>
//定义多个命名空间和不包含在命名空间的代码
<?php
declare(encoding="UTF-8");
namespace MyProject{
const CONN = 1;
class myclass{}
function myfunction(){}
}
//以下全局代码
namespace {
session_start();
$a = MyProject\myfunction();
echo MyProject\Connect::start();
}
?>
使用示例:
fuck.php文件:
namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo(){
echo 'this is fuck foo\bar\subnamespace';
}
class foo
{
static function staticmethod()
{
echo 'this fuck staticmethod';
}
}
test.php文件
<?php
namespace Foo\Bar;
include('fuck.php');
const FOO = 2;
function foo()
{
echo 'this lin.php foo functions';
}
class foo
{
static function staticmethod()
{
echo 'this lin static method';
}
}
===============
命名空间的元素使用:
三种引用方式
1。非限定名称,或不包含前缀的类名称,as:
$a = new foo();
foo::staticmethod();
如果当前的命名空间为 currentnamespace,foo将被解析为 currentnamespace\foo
如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则foo会被解析为 foo.如果命名空间中的函数和常量没有定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。
as:
foo(); // this lin.phph foo functions;
echo "<br />";
foo::staticmethod(); // this lin static method
echo "<br />";
echo FOO; // 2
================
2.限定名称,或包含前缘的名称。如
$a = new subnamespace\foo();或者 subnamespace\foo::staticmethod();
如果当前的命名空间是 currentnamespace,则 foo会被解析为
subnamespace\foo::staticmethod();
as:
subnamespace\foo(); //this is fuck foo\bar\subnamespace
echo "<br />";
subnamespace\foo::staticmethod(); //this fuck staticmethod
echo "<br />";
echo subnamespace\FOO; // 1
=================
3。完全限定名称或者包含了全局前缀操作符的名称;
$a = new \currentnamespace\foo();
或 \currentnamespace\foo::staticmethod();
访问任意全局类,函数,或常量,都可以使用完全限定名称,如: \strlen()...
namespace\Foo这个也是完全限定名称
\Foo\Bar\foo(); // this lin.php foo functions
echo "<br />";
\Foo\Bar\foo::staticmethod(); // this lin static method
echo "<br />";
echo \strlen('xxxxxx'); // 6 访问任意全局类,函数,或常量,都可以使用完全限定名称
echo "<br />";
\Foo\Bar\subnamespace\foo(); // this fuck staticmethod
===================
别名/导入
fuck.php
namespace My\nS;
class ok
{
public function __construct()
{
echo "this My\Ns";
}
public function test()
{
echo "this is test method";
}
}
-------------
<?php
//使用 namespace方法
/*
使用命名空间:别名/导入
有两种方式使用别名或导入方式:为类名使用别名,或为命名空间名称使用别名,PHP不支持导入函数或常量。
对命名空间中的名称(包含命名空间分隔符的完全限定名称如 Foo\Bar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不允许有反斜杠,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
*/
include 'fuck.php';
/*
完全引用
$ff = new My\nS\ok();
echo "<br />";
$ff->test();
*/
/*
部分引用
use My\nS;
$ff = new nS\ok();
echo "<br />";
$ff->test();
*/
//别名引用,可引入多个
use My\nS\ok as tt, My\Good\Yes;
$ff = new tt();
echo "<br />";
$ff->test();
---------------------
使用命名空间:后备全局函数/常量
在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,
如
\strlen($str);
namespace A\B\C;
class exception extends \Exception{}
对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量
全局空间
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀 \ 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。
php 命名空间(要求php5.3以上)的更多相关文章
- php5.3 PHP5.4 PHP5.5 新特性/使用PHP5.5要注意的
1.PHP 5.3中的新特性 1.1 PHP 5.3中的新特性 1.1.1. 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只 ...
- PHP5.3新特性
1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...
- PHP5.3、PHP5.4、PHP5.5、PHP5.6的新特性
1. PHP5.3中的新特性 1.1 支持命名空间(namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,可以用命名空间防止代码的冲突,命名空间的分隔符为 ...
- ThinkPHP3(命名空间、RBAC)
命名空间 当开发大型项目的时候,可以会需要成千上万的文件 面向对象通过命名空间来解决这个问题的. PHP命名空间是PHP5.3以后才出现的. 命名空间中可以出现:类,函数,常量 只有const定义的常 ...
- PHP 5.5 新特性
文章转自:http://wulijun.github.io/2013/07/17/whats-new-in-php-5-5.html http://www.cnblogs.com/yjf512/p/3 ...
- ThinkPHP框架二
ThinkPHP笔记二 1.1 TP框架的配置文件 在TP框架中,所有的配置文件都是自动加载的,加载的顺序:惯例配置<应用配置<调试配置<模块配置<动态配置 1. 惯例配置(T ...
- 小谈ThinkPHP
ThinkPHP也是一个MVC框架,分视图.控制器和模型,和Yii框架相比相对较好理解,并且是轻量级的框架(相对于Yii来说),在使用Yii框架时候如果将框架放在项目文件中,用编辑器打开文件都比较慢, ...
- 1 PHP 5.3中的新特性
1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
- PHP 5.3 新特性
1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
随机推荐
- OpenResty
- Custom-Progress-Dialog-Android
https://github.com/ManolescuSebastian/Custom-Progress-Dialog-Android
- Oracle VM Virtual Box 4.3 小巧精悍的虚拟机软件
https://www.virtualbox.org/wiki/Downloads Download VirtualBox Here, you will find links to VirtualBo ...
- MFC——从实现角度分析微云界面
在云计算时代之风吹来,很多互联网公司都在建云,提出云盘.云储存.云平台.云空间等等,骤然间,天下皆云.云是啥?有用户量,就有云,没有用户量,你的系统,你的云,也就是一朵白云. 最近研究了下微云的界面, ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- VC6.0设置选项解读(转)
其实软件调试还是一个技术熟练过程,得慢慢自己总结,可以去搜索引擎查找一些相关的文章看看,下边是一篇关于VC6使用的小文章,贴出来大家看看: 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解 ...
- 第一章 01 namespace 命名空间
一.什么是namespace? namesapce是为了防止名字冲突提供的一种控制方式. 当一个程序需要用到很多的库文件的时候,名字冲突有时无法避免.之前的解决思路是使用更长的变量名字,使用不方便. ...
- win7如何共享文件 图文教你设置win7文件共享
点评:win7文件共享已成为网友们之间的热议,接下来为大家分享下如何共享文件,首先开启guest账户( 开始菜单 → 运行 → services.msc → 双击 server 服务项 ,设置启动类型 ...
- iOS 常见知识点(三):Lock
iOS 常见知识点(一):Runtime iOS 常见知识点(二):RunLoop 锁是最常用的同步工具.一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单 ...
- AAPT: libpng error: Not a PNG file 问题解决
导入项目到Android Studio的时候,Gradle Build失败了,报的错是 FAILURE: Build failed with an exception. Execution faile ...