PHP 5.3 新特性详解(2)

PHP中原本有一个魔术方法__call(),当代码调用对象的某个不存在的方法时该魔术方法会被自动调用。新增的__callStatic()方法则只用于静态类方法。当尝试调用类中不存在的静态方法时,__callStatic()魔术方法将被自动调用。 

<?php   
class MethodTest {   
    public function __call($name, $arguments) {   
        // 参数 $name 大小写敏感   
        echo "调用对象方法 '$name' " . implode(' -- ', $arguments). "\n";   
    }   
    /**  PHP 5.3.0 以上版本中本类方法有效  */   
    public static function __callStatic($name, $arguments) {   
        // 参数 $name 大小写敏感   
        echo "调用静态方法 '$name' " . implode(' -- ', $arguments). "\n";   
    }   
}   
 
$obj = new MethodTest;   
$obj->runTest('通过对象调用');   
MethodTest::runTest('静态调用');  // As of PHP 5.3.0 

//以上代码执行后输出如下:
//调用对象方法'runTest' –- 通过对象调用
//调用静态方法'runTest' –- 静态调用

以函数形式来调用对象时,__invoke()方法将被自动调用。

<?php   
class MethodTest {   
    public function __call($name, $arguments) {   
        // 参数 $name 大小写敏感   
        echo "Calling object method '$name' " . implode(', ', $arguments). "\n";   
    }   
       
    /**  PHP 5.3.0 以上版本中本类方法有效  */   
    public static function __callStatic($name, $arguments) {   
        // 参数 $name 大小写敏感   
        echo "Calling static method '$name' " . implode(', ', $arguments). "\n";   
    }   
}   
$obj = new MethodTest;   
$obj->runTest('in object context');   
MethodTest::runTest('in static context');  // As of PHP 5.3.0 

1.6 新增Nowdoc语法

用法和Heredoc类似,但使用单引号。Heredoc则需要通过使用双引号来声明。 Nowdoc中不会做任何变量解析,非常适合于传递一段PHP代码。

<?php   
    // Nowdoc 单引号 PHP 5.3之后支持   
    $name = 'MyName';   
    echo <<<'EOT'   
    My name is "$name".   
    EOT;   
    //上面代码输出 My name is "$name". ((其中变量不被解析)   
    // Heredoc不加引号   
    echo <<<FOOBAR   
    Hello World!   
    FOOBAR;   
    //或者 双引号 PHP 5.3之后支持   
    echo <<<"FOOBAR"   
    Hello World!   
    FOOBAR;

支持通过Heredoc来初始化静态变量、类成员和类常量。

<?php   
// 静态变量   
function foo()   
{   
    static $bar = <<<LABEL   
Nothing in here...   
LABEL;   
}   
// 类成员、常量   
class foo   
{   
    const BAR = <<<FOOBAR   
Constant example   
FOOBAR;   
   
    public $baz = <<<FOOBAR   
Property example   
FOOBAR;   
}

1.7 在类外也可使用const来定义常量

//PHP中定义常量通常是用这种方式 
define("CONSTANT", "Hello world."); 
 
//并且新增了一种常量定义方式 
const CONSTANT = 'Hello World';

1.8 三元运算符增加了一个快捷书写方式

原本格式为是(expr1) ? (expr2) : (expr3) ; 如果expr1结果为True,则返回expr2的结果。
PHP5.3新增一种书写方式,可以省略中间部分,书写为expr1 ?: expr3 ; 如果expr1结果为True,则返回expr1的结果 

//原格式 
$expr=$expr1?$expr1:$expr2 
//新格式 
$expr=$expr1?:$expr2

1.9 HTTP状态码在200-399范围内均被认为访问成功

1.10支持动态调用静态方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16642.html