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中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
随机推荐
- MySQL Cluster初步测试结果汇总图示报告 --> 用mysqlslap与sysbench进行测试
Cluster结构图 测试环境简介 Mysql cluster集群测试环境 4 data node,32G 8核cpu 4 ...
- Socket之UDP分包组包
一般传输大的文件和信息的时候需要涉及到分包和组包,方法有很多,下面一种是借鉴了别人的思路,供大家参考哈 分包 1.取出需要传输的文件和字符的长度和大小放入缓存区里面: 2.设定固定传输的长度,用需要传 ...
- Vi、Vim及Gedit编辑器
搜索(注意,不需要输入:号.也可以先输入:号再键入命令) /string……………………向后搜索,从光标处向文件尾搜索,按n键继续搜索下一个 ?string……………………向前搜索 注意:搜索时会将所 ...
- Asp.Net 之 缓存机制
asp.net缓存有三种:页面缓存,数据源缓存,数据缓存. 一.页面缓存 原理:页面缓存是最常用的缓存方式,原理是用户第一次访问的时候asp.net服务器把动态生成的页面存到内存里,之后一段时间再有用 ...
- centos6.5 安装jdk7和tomcat7
JDK安装: 安装说明 系统环境:centos-6.5安装方式:rpm安装软件:jdk-7-linux-x64.rpm下载地址:http://www.oracle.com/technetwork/ja ...
- Android_Intent_passValue(4)
xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Find security bugs学习笔记V1.0
Find security bugs学习笔记V1.0 http://www.docin.com/p-779309481.html
- visibility,display区别
visibility:hidden,display:none 前者隐藏位置还在,后者隐藏位置消失
- quartz定时任务中常用的cron表达式
一:定时cron的格式,一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为: 1.秒(0~59) 2.分钟(0~59) 3.小时(0~23) 4.天(月(0~31,但是你需 ...
- Android开发了解——ODEX
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·dex文件单独存放,原APK中的classes.dex文件会保留.这 ...