PHP语言之php5.3介绍
小标 2018-11-14 来源 : 阅读 1190 评论 0

摘要:本文主要向大家介绍了PHP语言之php5.3介绍,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言之php5.3介绍,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。


PHP 5.3 介绍
PHP 2008 魁北克- Ilia Alshanetsky


 . 新版本的特性

* 兼职老版本下的代码
* 重点主要放在现有的功能的改进
* 更少的bug
* 更快的发布周期


1. 命名空间(Namespaces)

* PHP5.3最大的新功能
* 完全支持名字空间特征
* 大部分的功能的执行在编译时
* 简化命名惯例

1) 更清晰的代码

    不使用 Namespaces
    function MY_wrapper() {}
    class MY_DB {}
    define(''MY_COMM_STR'', '''');

   
    MY_wrapper();
    new MY_DB();
    MY_COMM_STR;

2) 使用 Namespaces
   
    namespace MY;
   
    function wrapper() {}
   
    class DB { }
   
    const CONN_STR = '''';
           
   
    use MY AS MY;
   
    wrapper();
   
    new DB();
   
    CONN_STR;
   


3) 一个文件中多个名字空间
   
    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)
    };
   
    // result:
    // string(18) "LIB_EXTRA::MScrypt"
    // string(11) "LIB::SQLite"





4) 名字空间的层级

    namespace foo;
   
    function strlen($foo) { return htmlspecialchars($foo); }
   
    echo strlen("test"); // test
    echo ::strlen("test") // 4
    echo namespace::strlen("test"); // test
   
    * function, class 和 constant 引用在一个名字空间中首先指向这个名字空间, 其次才是一个全局的范围


5) 名字空间 & 自动引入


    function __autoload($var) { var_dump($var); } // LIB::foo
    require "./ns.php";
    /**
         namespace LIB;
     new foo();
    ?>
    */

* __autoload() 将处理为和名字空间的类名一起。
* autoload 仅在 class 不在名字空间和全局范围内存在时触发。
* __autoload() 声明在一个名字空间中将不别调用!




6) 其他的名字空间的语法技巧

    namespace really::long::pointlessly::verbose::ns;
   
    __NAMESPACE__; // 当前的名字空间名称
   
    class a {}
   
    get_class( new a() ); // really::long::pointlessly::verbose::ns::abs
   
    use really::long::pointlessly::verbose::ns::a AS b; // 从一个名字空间引用class

   


2. 改进的性能
* md5() 速度提高了大概10-15%
* 引擎中更好的堆栈实现
* 常量移到只读内存区
* 改进Exception处理(更简单 & 更少的代码)
* 调用 (require/include)_once 去掉了使用open(2)(linux下的c函数)
* 使用gcc4编译的二进制更小更快

整体性能提高 5-15%



3. 新的语言特性


1) __DIR__

* 引入 __DIR__ magic常量 定位脚本的目录

    echo dirname(__FILE__); // < PHP 5.3
   
    /* vs */
   
    echo __DIR__; // >= 5.3


2) ?:  操作符
* 允许从2个值的or/and表达式快速的获取一个非空的值
   
    $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
   



3) __callStatic()
   
    * 等价于 __call() , 但它是为调用静态方法准备的
   
    class helper
    {
        static function __callStatic($name, $args){
            echo $name.''(''.implode('','' $args).'')'';
        }       
    }
   
    helper::test("foo", "bar"); // test(foo,bar);


// 动态的函数/方法调用有点慢...
 
 4) 动态的调用静态方法
 
* php 现在允许 动态的调用静态的方法
   
    class helper
    {
        static function foo(){
            echo __METHOD__;`
        }   
    }
   
    $a = "helper";
    $b = "foo";
   
    $a::$b(); // helper::foo

// 动态的函数/方法调用有点慢...

5) 延迟静态绑定

* 静态处理从编译时延迟到执行时
   
    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
   
   
    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.3
   

* 小心使用操作码缓存,没有向后兼容



6) MySQLInd

* 特殊的,高速的专门为PHP设计的MySQL调用库接口




* 更好的性能
* 内存的使用优化
* 内置的驱动(不是适应性的再次扩展)
* Many future options due to tight integration with PHP
* 目前还没有PDO_MySQL 支持 mysql(i) only for now





7) INI Magic

* CGI/FastCGI 支持".htaccess" 形式的INI控制
* 用户可以自己设定每个目录的INI在php.ini中通过[PATH=/var/www/domain.com]设定
* 优化错误处理
* 允许用户使用INI变量和常量任何定义的INI文件中
* 其他几个小的优化


    用户自定义的php.ini(.htaccess) 文件名. 默认为".user.ini"
    user_ini.filename = ".user.ini"


禁止这个特性 设置这个选项为空值


    用户自定义php.ini 的缓存失效期(time-

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!



本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程