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中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
随机推荐
- VS项目如何运用svn的忽略列表
在实际的项目开发中,有些文件(比如bin,obj下的文件)是不需要放在svn里面的,因为每次都会重新生成. 该如何排除这些文件那? 我试着在svn server上删除了这些文件夹,但是在文件夹上还是显 ...
- Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 44 bytes) in
最近莫名出现这个错误. 研究一下原因很奇葩呢. 原因:sql获取数据库中数据,取出数据赋给变量,数据太多,超过memory_limit内存设置了. 解决方法:设置memory_limit不建议.优化代 ...
- 大作业 XXX大学 课程管理系统
#include<stdio.h> #include<iostream> #include<string.h> #include <fstream> # ...
- WINAPI 变量(2861个)
WINAPI 变量(2861个) 这是从 c:\Program Files\Windows Kits\8.1\Include\um\WinUser.h 这个文件 中提取的 CTRL+F 查看变量所 ...
- RotatingDoughnut
RotatingDoughnut.zip
- Android开发环境中的概念和工具介绍
最近学习Android开发,以前使用C/C++多一些,现在再补点Java知识,不管是哪种语言,都不过是一种工具而已,真的学起来,大同小异,无谓优劣.学习Android编程肯定是要先从环境搭建开始,无论 ...
- android130 android启动
Android的编译环境只支持Linux和Mac OS,google推荐使用64位操作系统, ### android启动 > #### 当引导程序启动Linux内核后,会加载各种驱动和数据结构, ...
- [Effective C++ --015]在资源管理类中提供对原始资源的访问
引言 资源管理类是防止资源泄漏的有力武器,但是许多APIs直接指涉资源,除非你发誓永不使用这样的APIs,否则只得绕过资源管理对象(resource-managing objects)直接访问原始资源 ...
- jquery实现无缝滚动
//点击上一页 $('.pointLeft').click(function() { if (prevAllow) { prevAllow = false; scrollUlLeft = scroll ...
- Maven学习小结(一 初探)
1.下载Maven,解压并设置到环境变量中 https://maven.apache.org/download.cgi 需要先设置“JAVA_HOME”,否则报错: 之后查看Maven版本成功: 1. ...