php 命名空间(,PHP命名空间(Namespace)简明教程

这一特性在 PHP5.0x 时候就提出过,后来被取消并安排在 PHP6 中实现。而此次又再次“提前”到了 PHP5.3 发布,可见开发人员对其的重视以及谨慎的态度。

官方发布时说明文档的内容可能已过期(documentation maybe out dated),所以在这里简单的说明命名空间的用法:首先是声明一个命名空间,加入了新的关键字 namespace ,其应在类文件的开头

复制代码 代码如下:

namespace Project::Module;

class User {

const STATUS_OK = true;

function register($data) {

...

}

...

}?>

然后在控制器中(可能是其他文件)就可以这样调用

复制代码 代码如下:

$user = new Project::Module::User();

$user->register($register_info);

的确与平常的并无两样,但是我们可以将两个相互独立的类联系起来。比如

复制代码 代码如下:

Project::Module::User;

Project::Module::Blog;

这样就能从语言本身更容易描述和理解变量、类之间的关系,从而避免了“传统”上的 Project_Module_Blog 这样冗长的命名方式。

上面的说明可能很难说明使用命名空间带来了什么好处,新增加的 use 和 as 关键字或许能更好的说明问题。use 和 as 语句可以引用和声明 命名空间的“别名”。比如,上述的控制器中实例化类的代码可以这样写

复制代码 代码如下:

use Project::Module;

$user = new Module::User();

$user->register($register_info);

甚至

复制代码 代码如下:

use Project::Module::User as ModuleUser;

$user = new ModuleUser;

$user->register($register_info);

类中的常量也可以通过命名空间访问,比如上述类中的 STATUS_OK 就可以通过命名空间

复制代码 代码如下:

Project::Module::User::STATUS_OK

访问。进一步的,也可以用别名简化那么长的“变量名称”

复制代码 代码如下:

use Project::Module::User::STATUS_OK as STATUS_OK;

echo STATUS_OK;

顺便提下“超空间(The Global Namespace)”的概念。所谓的“超空间”,就是没有指定命名空间的变量、类和函数。比如

复制代码 代码如下:

function foo() {

...

}

这的函数,可以使用 foo() 执行的同时,也可以使用 ::foo(); 这样执行。

最后,配合使用 autoload 函数即可载入指定命名空间的类。简单的函数如下

复制代码 代码如下:

function __autoload( $classname ) {

$classname = strtolower( $classname );

$classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );

require_once( dirname( __FILE__ ) . '/' . $classname . '.class.php' );

}

这样,比如调用

复制代码 代码如下:

__autoload('Project::Module::User');

就可以自动载入 Project_Module_User.class.php 文件(虽然这样看起来并不方便多少)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 10大谬论

全世界只有3.14 % 的人关注了数据与算法之美谬误 #1: Python 是一门新语言伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实,这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Ja…

【litrpa专题】首个rpa程序,使用litrpa采集百度地图地铁数据

RPA最近2年里红遍大江南北,人力成本上升,办公自动化势在必行,Excel长期肩负着办公自动化的重任,就算有【Excel催化剂】这些插件的把持,仍然有许多需求未能满足。笔者一直关注RPA领域,从广义来说&#xff0c…

ecshop goods.php,重命名ecshop的商品页goods.php为shangpin.php

有人说,将ecshop商品详情页的文件名 goods.php 改一个名字,对百度收录会有帮助,也许吧,这里不讨论是否有帮助,这里只讲解如何重命名。以下最模板的方法只供参考例如:我们将 goods.php 改为 shangpin.php &a…

禁止sublime启动时连网检查更新

sublime每次启动都会连网检查更新在Preferences -> Settings-User 里添加以下配置禁止连网检查更新: "update_check": false

我是如何保持长期写作的

大家好,我是Z哥。自从我开始写作以来,发现自己的文学气息更浓郁了,走在路上都觉得自己散发着文学气息~哈哈,开个玩笑。不怕和大家说,我小时候写作文是真的拉垮,每次写作文都是硬憋着写满500字、…

不只是舒适,简直是享受,Google公司用的腰靠,到底有什么秘密?

▲数据汪特别推荐点击上图进入玩酷屋之前小木推荐“德国MINICUTE人体工学腰垫”受到了大家一致的好评和争相购买。小木为什么推荐这一款原因是:据统计,我国腰椎病患者已经突破2亿人。30~40岁人群中,患有颈腰椎病的占比59.1%!而且有…

php输出远程文件边读边下载,php file_get_contents读取远程文件并输出

php file_get_contents读取远程文件并输出,这样做的好得就是不会在flash播放代码中显示对方网站的文件地址,下面是我自己用的一个.是读取方视频文件用的.require_once("s/s.php");$a_id get_value(id,);if(is_numeric($a_id) ){$result mysql_query("Select * f…

[Yii Framework] spl_autoload_register 导致加载顺序冲突

php版本 davidhhuandavidhhuan-ThinkPad-T410:~$ php -version PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch (cli) (built: Sep 12 2012 18:59:41) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies Yii版本 1.1.13 Yii …

Python花呗分析模型温馨提醒:支出不规范,收入两行泪

全世界只有3.14 % 的人关注了数据与算法之美春节结束,离开家里混吃混喝的怀抱,我又开始了用花呗、还花呗的无限循环。花呗给人一种“有钱”的感觉,我不禁思考:像我这种发工资前靠花呗活着,一发工资就还花呗的平静什么时…

fiddler插件开发

Fiddler 是优秀的抓包工具,有着众多的优秀插件。Fiddler 软件是由C#语言开发的,运行在.net Framework 框架之上,所以我们也可以使用vs来开发自己的Fiddler插件,下面就介绍fiddler插件开发基本步骤。1.打开visual studio 创建一个V…

php读取excel函数,PHP读取Excel函数Spreadsheet_Excel_Reader

require (__DIR__./Spreadsheet_Excel_Reader.class.php);class ExcelReader {public static function readXLS($file){$data new Spreadsheet_Excel_Reader();$data->setOutputEncoding(UTF-8); //设置输出的编码为utf8$ret $data->read($file); //要读取的excel文件地…

2500 万行的代码就问你敢不敢动?!

全世界只有3.14 % 的人关注了数据与算法之美近日,某网友在 Hacker News 上发起了一个 “你见过的最糟糕的代码是什么?” 的问题,引起了广泛关注和讨论,评论数已接近600条。其中,一位 ID 为“oraguy”的程序员对 Oracle…

WPF Grid添加边框的两种方法

最近项目中使用到了Grid表格,居然要加边框,查了一下,grid原生居然是不支持实线边框的。。最终我还是实现了效果,看看吧:左边是直接写的每行一个border,每列写一个border,这样在行列比较少的时候还行,如果多…

php maximum,解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示...

解决分析:这个错误是说你的php 执行时间越过了配置文件中设置的最大执行时间30秒钟,这不是你的程序本身存在的问题,而 是系统的配置文件问题,如果你的网速快的话,可能再执行一次就不会出现这种错误了,不过 …

javaBean【02】javaBean与表单应用

对于javaBean&#xff0c;我们说就是一个*.java文件。对于javaBean的应用必须结合表单才能体现。我们来以一个实例学习javaBean的应用。 biaodan.html <html> <head> <title>WEB开发</title> </head> <body> <form action"javaBe…

当初互联网大佬给的几块钱“羊毛”,现在又要我们加倍还回去!

全世界只有3.14 % 的人关注了数据与算法之美对于上班族来说&#xff0c;春节早就过去了&#xff0c;今天已经是上班的第N天了。不知道大家在春节七天有没有走进电影院呢&#xff1f;在春节档期的八部电影各有各的特色&#xff0c;数据汪一一看完之后真是爽歪歪&#xff01;但是…

在 dotnet runtime 的容器中安装 dotnet global tool

在 dotnet runtime 的容器中安装 dotnet global toolIntro.NET Core 从 2.1 开始支持 Global tool, 借助 global tool 我们可以通过命令行来实现很多功能&#xff0c;微软提供的一系列的 dotnet 诊断工具也都提供了 global tool&#xff0c;我们可以通过 global tool 比较方便的…

java线程带来的异常,java多线程练习之捕获子线程异常例子

本文章给大家介绍java多线程练习之捕获子线程异常一个实例&#xff0c;希望对大家会有所帮助。java多线程程序中&#xff0c;所有线程都不允许抛出未捕获的checked exception&#xff0c;也就是说各个线程需要自己把自己的checked exception处理掉。但是无法避免的是unchecked …

Asymptote 学习记录(2):例子阅读

学习编程的一个有效方式是去读别人写的代码.我学习了这里的代码.代码虽多,但是简单.代码如下(稍微做了修改): import settings; pdfviewer"/usr/bin/okular"; outformat"pdf"; size(400); texpreamble("\usepackage{CJK}\AtBeginDocument{\begin{CJK}…

如何启发孩子的数学思维?你想要的答案或许在这!

▲数据汪特别推荐点击上图进入玩酷屋记得寒假时&#xff0c;超模君七岁小表弟来问了我一道题目&#xff1a;下面线段有多少条&#xff1f;首先我问了他什么是线段&#xff1f;他说&#xff1a;两端有端点&#xff0c;不可以伸长的直线。AB就是线段。我慢慢引导&#xff0c;假如…