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中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
随机推荐
- web工作方式,浏览网页,打开浏览器,输入网址按下回车键,然后会显示出内容,这个过程是怎样的呢?
以下内容摘自<Go Web编程>,介绍的通俗易懂. 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什 ...
- js大小写转换
toUpperCase 方法返回一个字符串,该字符串中的所有字母都被转化为大写字母 sn.toUpperCase() toLowerCase 方法返回一个字符串,该字符串中的字母被转换为小写字母 sn ...
- Android应用插件式开发解决方法[转]
一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分 ...
- ABAP 常用系统变量
SY-ABCDE 常量,A-Z字母表SY-BATCH 后台的程序运行SY-COLNO:当前选定列的列号SY-CPAGE 列表的当前显示页SY-CUCOL 屏幕,PAI 的水平光标位置SY-CUROW: ...
- 学习笔记之Linux开发(C语言)
第二章 Linux下C程序开发环境 vi编辑器 gcc 第三章 Linux基础 Kernel Shell 第三章 Linux技术实验 ls -l 以长格式的形式查看当前目录下所有可见文件的详细属性. ...
- iOS 本地自动打包工具
1.为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试.而且打包速度好慢,太浪费时间了.如果有 ...
- MySQL提供的错误日志中的错误级别一共有3个分别为:
ERROR_LEVEL-->错误级别 WARNING_LEVEL-->警告级别 INFORMATION_LEVEL-->信息级别
- posix thread概述
1. 基本概念 一个Unix进程可以理解为一个线程加上地址空间.文件描述符和其他数据.异步表明事情相互独立发生, 除非有强加的依赖性. 并发指实际可能是穿行发生的事情好像同时发生一样.并行指并发序列同 ...
- uva - 133 The Dole Queue(成环状态下的循环走步方法)
类型:循环走步 #include <iostream> #include <sstream> #include <cstdio> #include <cstr ...
- JavaScript 零散知识点1 (正则表达式+定时器+hover)
1.clear:both清楚浮动影响//css中 2.正则表达式 search方法 :指明是否存在相应的匹配,如找到一个返回一个整数值,表明这个匹配距离字符串开始的偏移位置,如果没有找到匹配返回-1f ...