首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

更新后的 PHP PHP 的新面孔(1)

更新后的 PHP PHP 的新面孔(1)

PHP 被开发为一个开源项目,并作为一个开源项目进行维护,数百(也可能是数千)名贡献者积极致力于该语言的改进,使之能够满足现代 Web                开发的需要。PHP 不断吸纳新的编程思想,借用其他编程语言的想法,同时还维持了高水平的向后兼容性。这些品质使得 PHP                目前处于突出的地位:该语言支持着大约 82% 的 Web应用,并支持最大的一些网站(比如 Facebook)。PHP 是内容管理系统 (CMS)                框架背后的核心技术,这些框架包括 WordPress、Drupal、Magento 和 Joomla!(它们的总和占所有 Web 应用的 30%)。
如果您很长一段时间(甚至是过去几年)没有看过                PHP,那么您可能已经不认识它现在的样子。本文是由四个部分组成的系列文章的第一个部分,在本文中,将向您介绍最新版本中添加的最新特性,这些版本包括                PHP 5.3、5.4 和 5.5。
当然,PHP 的改变不是凭空发生的,新的语言特性只是 PHP 整体改进的一部分。PHP 程序员组装其开发服务器、管理其第三方库和解决 Web                安全问题的方式也在发生改变。在本系列的后续文章中,将介绍改进 PHP 生态系统的一些方面。
“我不认为有人偷了任何东西;我们只是借用而已。”
B.B. King

命名空间关于本系列PHP 在活动开源项目的庇护下不断改进,目前为许多 Web 应用提供支持。PHP 早期是一种模块语言,从那时到现在,PHP                    已经历了显著的变化。如果您多年没有使用过或评估过 PHP 技术,那么您很可能几乎认不出当前的一些 PHP 项目。本系列文章将向您展示最新的                    PHP 功能,以及如何使用当今的 PHP 来构建现代化的、安全的网站。

命名空间是一项编程功能,旨在允许不同库中的类(和函数)具有相同的名称。随着 PHP                成长成为一种语言,以及代码库的重用变得更加普遍,名称冲突开始成为一个主要问题。通过将每个库细分到它们自己的命名空间,您可以安装和使用第三方库(没有不良后果),该库包含名称与您的名称相匹配的所有类。
在支持建立命名空间之前,库解决了这个问题:通过在所有类前面加上一致的短语,比如 Zend 框架前面附加的                Zend_。您可以用深奥的类名称来结束命名,比如                Zend_Db_Table,而且您还需要在编码时重复键入这样的前缀。在(急需)将                DateTime 类添加到 PHP 5.2 版的核心中时,问题出现了。突然之间,许多开源库开始崩溃,因为它们创建了名为                DateTime 的自己的类来填补这个缺口。
命名空间是通过 namespace 关键字创建的,并用反斜杠 (\) 进行分隔。清单 1                显示了一个简单的示例。
清单 1. 简单的命名空间使用
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
namespace zebra;

class DateTime
{
   public function __construct() {
      echo "Today!";
   }
}

function stripes() {
   echo "-=-=-=-=-=-=-=-";
}




在 清单 1 中,我定义了自己的命名空间,称之为                zebra,然后我还在该空间中定义了一个类和一个函数。在这种情况下重新定义 DateTime                类不会带来任何问题或错误,因为我在命名空间中创建了自己的 DateTime 版本。现在,我可以通过引用全名(使用                \ 作为分隔符)来使用命名空间,如清单 2 所示。
清单 2. 使用一个自定义命名空间
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include 'listing1.php';

// Use the stripes function I declared in my namespace:
zebra\stripes();

// Use my own DateTime class:
$dt = new zebra\DateTime();

// Now use the 'root' level Datetime class:
$real = new \DateTime('tomorrow noon');
echo $real->format(\DateTime::ATOM);




在清单 2 的第 2 行上,include 以 namespace 指令开头的文件                (listing1.php)。然后,我可以通过使用 zebra\ 作为前缀来引用我的类和函数。我还可以使用全局类,比如原始                DateTime,通过附加反斜杠来指示全局命名空间。
清单 2 中的技术非常方便,但还有一个方法可以让代码看起来更简洁:新的 use                关键字。这个关键字指出,您想要从该命名空间中直接访问某个特定的类,如清单 3 所示。
清单 3. 使用 use                包含命名空间
1
2
3
4
5
6
<?php
include 'listing1.php';
use zebra\DateTime;

// Use our own DateTime class:
$dt = new DateTime();




您还可以使用 use 关键字创建别名,这样您就可以将任何类重命名为您的范围内的其他名称。清单 4 显示了如何创建一个别名。
清单 4. 创建一个别名
1
2
3
4
5
6
<?php
include 'listing1.php';
use zebra\DateTime as ZDT;

// Use our own DateTime class:
$dt = new ZDT();




您可以使用命名空间做比我这里介绍的更多的事情,包括创建次级命名空间。您可以深入研究有关的官方文档。
返回列表