PHP 5.3 新特性

PHP 5.3

1、支持命名空间

手册


2、增加后期静态绑定

手册

在PHP中,我们可以在类中通过self关键字或者CLASS来判断或调用当前类。但有一个问题,如果我们是在子类中调用,得到的结果将是父类。因为在继承父类的时候,静态成员就已经被绑定了。

class A
{
    static public function callFuncXXOO()
    {
        print self::funcXXOO();
    }

    static public function funcXXOO()
    {
        return "A::funcXXOO()";
    }
}

class B extends A
{
    static public function funcXXOO()
    {
        return "B::funcXXOO";
    }
}

$b = new B;
$b->callFuncXXOO();
输出是:

A::funcXXOO()
PHP 5.3.0中增加了一个static关键字来引用当前类,即实现了延迟静态绑定:

class A
{
    static public function callFuncXXOO()
    {
        print static::funcXXOO();
    }

    // ...
}

// ...
这样就会像预期一样输出了:

B::funcXXOO

3、增加 goto 操作符

手册

goto 语句有可能会导致程序流程不清晰,可读性减弱,但在某些情况下具有其独特的方便之处,例如中断深度嵌套的循环和 if 语句。



//以上运行时会输出 2

4、添加了原生的闭包(Lambda/匿名函数)支持

手册

5、新增两个魔术方法, __callStatic 和 __invoke

手册

用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

class A
{
    public function __invoke($str)
    {
        print "A::__invoke(): {$str}";
    }
}

$a = new A;
$a("Hello World");
输出是:

A::__invoke(): Hello World

6、添加 Nowdoc 语法支持

手册

就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。

7、Heredoc 结构中可以用双引号来声明标识符了。

手册


8、const 关键字可用来在类定义之外定义常量了

手册

和使用 define() 来定义常量不同的是,使用 const 关键字定义常量必须处于最顶端的作用域,因为用此方法是在编译时定义的。即不能在函数内,循环内以及 if 语句之内用 const 来定义常量。

9、三元运算符可以简写省略中间的部分

表达式 expr1 ?: expr3 ,当 expr1 为 TRUE 时返回 expr1,否则返回 expr3。

10、异常可以嵌套了

getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();
?>

11、可以动态访问静态变量了



上边运行时输出:

123

12、mail()函数支持记录发送日志了

在配置文件 php.ini 中可设置日志路径。参数名:mail.log

你可能感兴趣的:(PHP 5.3 新特性)