电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP5.3新特性介紹

瀏覽:6日期:2024-02-25 18:12:34

Namespacesphp 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'); // 4echo namespace::strlen('test'); // testnamespace和autoload的友情autoload會根據namespace名稱以及class名稱來解析類文件位置僅當namespace和全局范圍都沒找到class定義的情況下,autoload才會被觸發在namespace中定義的__autoload不會被自動調用PLAIN TEXTCODE:function __autoload($var) { var_dump($var); } // LIB::foorequire './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::ause really::long::pointlessly::verbose::ns::a AS b;// 從名稱空間中引用一個類注:這里的內容節選自pdfIntroduction to PHP 5.3 Slides,后文不再復述。

性能提升php 5.3的總體性能提升了5 - 15%

md5()快了10-15%Better stack implementation in the engineConstants移到read-only內存里exception處理過程改進(簡化,opcodes更少)(require/include)_once改進,去掉重復openSmaller binary size & startup size with gcc4新語言特性__DIR__在5.3以前,為了獲得當前腳本的目錄,需要一次函數調用

PLAIN TEXT

CODE:

echo dirname(__FILE__); // < PHP 5.3

在5.3,只需要一個魔術常量__DIR__就解決了。

PLAIN TEXT

CODE:

echo __DIR__; // >= PHP 5.3?:操作符便捷的?:操作符,可以從兩個值/表達式中快速取得非空值。

PLAIN TEXT

CODE:

$a = true ?: false; // true$a = false ?: true; // true$a = '' ?: 1; // 1$a = 0 ?: 2; // 2$a = array() ?: array(1); // array(1);$a = strlen('') ?: strlen('a'); // 1__callStatic()新增了魔術方法__callStatic,功能和__call類似,但是僅對static方法有效。

PLAIN TEXT

CODE:

class helper { static function __callStatic($name, $args) { echo $name.'('.implode(',', $args).')'; }}helper::test('foo','bar'); // test(foo,bar)動態調用static方法動態的調用靜態方法?動靜結合。

PLAIN TEXT

CODE:

class helper { static function foo() { echo __METHOD__; }}$a = 'helper';$b = 'foo';$a::$b(); // helper::fooLate Static Binding不知道怎么譯,可能留個原文更容易理解。靜態方法的事件處理時機有變化,以前是在編譯期處理,現在是執行期間處理。

在php 5.3之前,下面的代碼會輸出一個A,但是這不是咱們要的,whoami方法已經在class B中重新定義,它本該輸出B才符合咱們想當然的思維。

PLAIN TEXT

CODE:

class A { public static function whoami() { echo __CLASS__; } public static function identity() { self::whoami(); }}class B extends A { public static function whoami() { echo __CLASS__; }}B::identity(); // A <-- PHP <5.3下面代碼中使用了static::whoami()來調用靜態方法。php 5.3之后,由于__CLASS__是在執行期被處理,那么這個例子中能順利抓到class B。

PLAIN TEXT

CODE:

class A { public static function whoami() { echo __CLASS__; } public static function identity() { static::whoami(); }}class B extends A { public static function whoami() { echo __CLASS__; }}B::identity(); // B <-->= PHP 5.3mysqlnd見mysqlnd成為php 5.3中的默認mysql驅動

但是PDO_MySQL暫時還不支持mysqlnd,目前只有mysql(i)擴展可以用到

之前介紹的php 5.3的新特性,都是方便開發人員的東東。下面介紹個很討虛擬主機提供商喜歡的特性。

增強的ini文件支持CGI/ FastCGI支持類似.htaccess的INI配置每個目錄下都可以有INI設置,ini的文件名取決于php.ini的配置,但是[PATH=/var/www/domain.com], [HOST=www.domain.com]段落的設置用戶不能修改。增強的error handling允許在ini文件中定義變量和常量,可以在程序中直接調用。附上一段ini文件的例子

PLAIN TEXT

CODE:

#用戶自定義的php.ini文件名(.htaccess). 默認是'.user.ini'user_ini.filename='.user.ini'#如果要禁用這個特性,設置為空值即可user_ini.filename=#用戶自定義的php.ini文件TTL時長(time-to-live),單位為秒,我理解為緩存過期時間。默認為300秒user_ini.cache_ttl=300[PATH=/var/www/domain.com]variables_order = GPCsafe_mode =1[my variables]somevar = “1234”anothervar = ${somevar}; anothervar == somevar[ini arrays]foo[bar]=1foo[123]=2foo[]=3

標簽: PHP
主站蜘蛛池模板: 河南中专学校|职高|技校招生-河南中职中专网| 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | IP检测-检测您的IP质量 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 净化工程_无尘车间_无尘车间装修-广州科凌净化工程有限公司 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 发光字|标识设计|标牌制作|精神堡垒 - 江苏苏通广告有限公司 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 猎头招聘_深圳猎头公司_知名猎头公司| 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 上海诺狮景观规划设计有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 小型气象站_车载气象站_便携气象站-山东风途物联网 |