php 5.3带来了什么(一)
2008-09-21 17:15
218 查看
之前陆续介绍了php
5.3的一些新特性,正好上周看到ZendCon关于5.3的ppt,介绍的更为详细,那么这里做个归总或者说翻译:)
FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。
PLAIN
TEXT
CODE:
function MY_wrapper() {}
class MY_DB { }
define('MY_CONN_STR', '');
MY_wrapper();
new MY_DB();
MY_CONN_STR;
使用名称空间之后,代码看上去更加clean。
PLAIN
TEXT
CODE:
namespace MY;
function wrapper() {}
class DB { }
const CONN_STR = '';
use MY AS MY;
wrapper();
new DB();
CONN_STR;
PLAIN
TEXT
CODE:
namespace LIB;
class MySQL {}
class SQLite {}
$b = new SQLite();
namespace LIB_EXTRA;
class MScrypt {}
$a = new MScrypt();
var_dump(
get_class($a),
get_class($b)
);
以上代码输出为:
PLAIN
TEXT
CODE:
string(18) "LIB_EXTRA::MScrypt"
string(11) "LIB::SQLite"
php是解释执行的语言,以上结果合情合理。
PLAIN
TEXT
CODE:
namespace foo;
function strlen($foo) { return htmlentities($foo); }
echo strlen("test"); // test
echo ::strlen("test"); // 4
echo namespace::strlen("test"); // test
仅当namespace和全局范围都没找到class定义的情况下,autoload才会被触发
在namespace中定义的__autoload不会被自动调用
PLAIN
TEXT
CODE:
function __autoload($var) { var_dump($var); } // LIB::foo
require "./ns.php"; /*
<?php
namespace LIB;
new foo();
*/
TEXT
CODE:
namespace really::long::pointlessly::verbose::ns;
__NAMESPACE__; // 新增的魔法常量,表示当前namespace名称
class a{}
get_class(new a()); // really::long::pointlessly::verbose::ns::a
use really::long::pointlessly::verbose::ns::a AS b;
// 从名称空间中引用一个类
注:这里的内容节选自pdf Introduction
to PHP 5.3 Slides,后文不再复述。
5.3的一些新特性,正好上周看到ZendCon关于5.3的ppt,介绍的更为详细,那么这里做个归总或者说翻译:)
Namespaces
php 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP NamespacesFAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。
代码更清晰
5.3之前常见的代码,需要自定义前缀区分函数和类名PLAIN
TEXT
CODE:
function MY_wrapper() {}
class MY_DB { }
define('MY_CONN_STR', '');
MY_wrapper();
new MY_DB();
MY_CONN_STR;
使用名称空间之后,代码看上去更加clean。
PLAIN
TEXT
CODE:
namespace MY;
function wrapper() {}
class DB { }
const CONN_STR = '';
use MY AS MY;
wrapper();
new DB();
CONN_STR;
一个文件中定义了多个namespace
如果一个文件中定义了多个namespace,应该怎样处理?PLAIN
TEXT
CODE:
namespace LIB;
class MySQL {}
class SQLite {}
$b = new SQLite();
namespace LIB_EXTRA;
class MScrypt {}
$a = new MScrypt();
var_dump(
get_class($a),
get_class($b)
);
以上代码输出为:
PLAIN
TEXT
CODE:
string(18) "LIB_EXTRA::MScrypt"
string(11) "LIB::SQLite"
php是解释执行的语言,以上结果合情合理。
namespace的优先级
namespace中定义的函数,类和常量优先,其次才是全局的。PLAIN
TEXT
CODE:
namespace foo;
function strlen($foo) { return htmlentities($foo); }
echo strlen("test"); // test
echo ::strlen("test"); // 4
echo namespace::strlen("test"); // test
namespace和autoload的友情
autoload会根据namespace名称以及class名称来解析类文件位置仅当namespace和全局范围都没找到class定义的情况下,autoload才会被触发
在namespace中定义的__autoload不会被自动调用
PLAIN
TEXT
CODE:
function __autoload($var) { var_dump($var); } // LIB::foo
require "./ns.php"; /*
<?php
namespace LIB;
new foo();
*/
namespace一些辅料
PLAINTEXT
CODE:
namespace really::long::pointlessly::verbose::ns;
__NAMESPACE__; // 新增的魔法常量,表示当前namespace名称
class a{}
get_class(new a()); // really::long::pointlessly::verbose::ns::a
use really::long::pointlessly::verbose::ns::a AS b;
// 从名称空间中引用一个类
注:这里的内容节选自pdf Introduction
to PHP 5.3 Slides,后文不再复述。
相关文章推荐
- php 5.3带来了什么(二)
- PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe 是什么意思!(转)
- PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰
- PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe 是什么意思?
- 什么是CGI 什么是 FastCGI 什么是 php-fpm
- php5.3 不支持 session_register() 此函数已启用的解决方法
- PHP 5.3版本上MS SQL Server的连接配置
- phpize是什么
- OO给我们带来了什么?
- php5.3改动
- ubuntu12下安装的php5.3
- PHP5.3新特性
- HTML 5将给开发者带来什么?
- PHP中的符号 ->、=> 和 :: 分别表示什么意思?
- 《Google将带来什么》读书笔记
- windows下 php5.3如何连接mssql
- Ubuntu11.10 更换PHP5.3到5.2
- 微软在WPC 2015中为“伙伴们”带来了什么?
- PHP5.3新特性之语言特性
- 什么是phpDocumentor