php 命名空间(要求php5.3以上)

摘要:
Php5.3或以上<Brace方法namespaceMyProject{constCONN=1;start();fuck.php文件;}}test.php文件<常量FOO=2;$a=newfoo();foo;Echo“如果$a=newsubnamespacefoo();,foo将被解析为submespacefoo;

要求php5.3以上

<?php
namespace test;
// 命名空间与目录类似功能,也可定义子命名空间,用分层的方式定义:
/*
namespace mydirokproject;

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 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 = MyProjectmyfunction();
  echo MyProjectConnect::start();
}
?>
//定义多个命名空间和不包含在命名空间的代码
<?php
declare(encoding="UTF-8");
namespace MyProject{
   const CONN = 1;
   class myclass{}
   function myfunction(){}
}
//以下全局代码
namespace {
  session_start();
  $a = MyProjectmyfunction();
  echo MyProjectConnect::start();
}
?>

使用示例:

fuck.php文件:

namespace FooBarsubnamespace;
const FOO = 1;
function foo(){
 echo 'this is fuck fooarsubnamespace';
}
class foo
{
  static function staticmethod()
    {
        echo 'this fuck staticmethod';
    }
}

test.php文件

<?php
namespace FooBar;
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将被解析为 currentnamespacefoo
如果使用 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 subnamespacefoo();或者  subnamespacefoo::staticmethod();
如果当前的命名空间是 currentnamespace,则 foo会被解析为
subnamespacefoo::staticmethod();
as:
subnamespacefoo(); //this is fuck fooarsubnamespace
echo "<br />";
subnamespacefoo::staticmethod(); //this fuck staticmethod
echo "<br />";
echo subnamespaceFOO; // 1
=================
3。完全限定名称或者包含了全局前缀操作符的名称;
$a = new currentnamespacefoo();
或 currentnamespacefoo::staticmethod();
访问任意全局类,函数,或常量,都可以使用完全限定名称,如: strlen()...

namespaceFoo这个也是完全限定名称

FooBarfoo(); // this lin.php foo functions
echo "<br />";
FooBarfoo::staticmethod(); // this lin static method
echo "<br />";
echo strlen('xxxxxx'); // 6 访问任意全局类,函数,或常量,都可以使用完全限定名称
echo "<br />";
FooBarsubnamespacefoo(); // this fuck staticmethod

===================

别名/导入

fuck.php
namespace My S;
class ok
{
    public function __construct()
    {
        echo "this MyNs";
    }
    public function test()
    {
        echo "this is test method";
    }
}

-------------

<?php
//使用 namespace方法
/*
使用命名空间:别名/导入
有两种方式使用别名或导入方式:为类名使用别名,或为命名空间名称使用别名,PHP不支持导入函数或常量。
对命名空间中的名称(包含命名空间分隔符的完全限定名称如 FooBar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不允许有反斜杠,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
*/
include 'fuck.php';
/*
完全引用
$ff = new My Sok();
echo "<br />";
$ff->test();
*/

/*
部分引用
use My S;
$ff = new nSok();
echo "<br />";
$ff->test();
*/
//别名引用,可引入多个
use My Sok as tt, MyGoodYes;
$ff = new tt();
echo "<br />";
$ff->test();

---------------------

使用命名空间:后备全局函数/常量
在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,

strlen($str);

namespace ABC;
class exception extends Exception{}

对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量

全局空间
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

免责声明:文章转载自《php 命名空间(要求php5.3以上)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ColorBox常见问题Objective-C学习--字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ERP框架开发中的License许可验证机制设计与实现 (包含源代码下载)

ERP框架开发中的License许可验证机制设计与实现 (包含源代码下载) 许可机制是ERP框架中必不可少的一部分,可以有效的保护框架资源在授权范围内应用,增加企业投资的回报。在研究了几种类型的许可机制(序列号注册码,Web服务联机验证,授权License文件)后,最后选定以Signed Xml配合RSA算法,作为许可机制的主要技术实现。 主要达到的目的如...

《深入浅出WPF》笔记——命令篇

 一、认识命令 1.1命令的特点   提到“命令”,我们应该想到命令的发出者,命令的接受者,命令的内容,准备工作,完成任务,回报工作。。。与事件中的发送者,接受者,消息,处理,处理,处理一一对应,如果是单纯的几个对应关系,的确用事件是能够代替的,不过,命令相对事件有其自己的特点的。比如,古时候,如果两个部落发动战争,经常在出军之前,做了充分的准备,才可能一...

ModelAndView学习笔记

作者:水车 api: 构造函数摘要 ModelAndView()           bean样式用法的默认构造函数:填充bean属性,而不是传递构造函数参数。 ModelAndView(Object view)           当没有模型数据暴露时,方便的构造函数。 ModelAndView(Object view, Map model) ...

数据储存——远程服务器存储——JSON

JSON 一.特点     1.JavaScript Object Notation     2.一种轻量级的数据交互格式 二.格式     1.[ ] 数组:[value1, value2, value3...]     2.{ } 对象:{key1:value1, key2:value2, key3:value3,...}       1-key:字符...

基于jdk自带httpserver开发的最小完整MVC框架

基于jdk自带httpserver开发的最小完整MVC框架 410kb级的完整MVC:solon(83k) + jdkhttp(27k) + enjoy(227k) + snack3(73k) DEMO启动时间:0.1s solon 是一个插件框架,提供MVC,IOC,AOP,注解,插件机制。 jdkhttp 基于jdk8自带com.sun.net.ht...

对Oracle中的表进行分区

表空间是指磁盘上的一块存储区域,用来存放表。   使用范围分区法对数据量大的表进行分区,分区存放到不同的表空间。   范围分区就是用表中的某个字段值的范围进行分区。   比如:   1)用数值型的id字段,id<100000的在第1个分区,100000<=id<200000的在第二个分区。   2)用日期类型的字段,2011年的数据在一个...