Namespacesphp 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得......
Namespaces php 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给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一些辅料 PLAIN 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;// 从名称空间中引用一个类 注:这里的内容节选自pdfIntroduction to PHP 5.3 Slides,后文不再复述。
性能提升 php 5.3的总体性能提升了5 - 15%
1/3 1 2 3 下一页 尾页 |