PHP 5/Zend Engine 2.0的改进(二)

原创 2003年10月22日 08:27:00
PHP 5/Zend Engine 2.0的改进<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

PHP5允许常量中包含表达式,但在编译时常量中的表达式将被计算,
因此常量不能在运行中改变它的值。

class Bar {
    const
a = 1<<0;
    const
b = 1<<1;
    const
c = a | b;
}
?>

以前代码中的用户自定义类或方法中虽然未定义"const”关键字,
但无需修改就可以运行。

 

(Exceptions)

PHP4中没异常处理,PHP5引入了与其它与语言相似的异常处理模型。

<?php
class MyExceptionFoo extends Exception {
    function
__construct($exception) {
       
parent::__construct($exception);
    }
}

try {
   
throw new MyExceptionFoo("Hello");
}
catch (MyExceptionFoo $exception) {
    print
$exception->getMessage();
}
?>

以前代码中的用户自定义类或方法中虽未定义'catch', 'throw' 和 'try'关键字,但无需修改

 

PHP4中,函数不可能返回对象的值并对返回的对象进行方法调用,随着Zend Engine 2
ZEND引擎2)的出现,以下调用成为可能:















 


<?php
class foo {
    static
$my_static = 5;
}

print
foo::$my_static;
?>

 

Static Methods

例如:

<?php
class Foo {
   
public static function aStaticMethod() {
       
// ...
   
}
}

Foo::aStaticMethod();
?>

 

 

Instanceof

PHP5引入了 “instanceof“关键字来确定一个对象是否是某一个对象的实例,或某一个对象的派生,或使用了某一个接口。

示例:

<?php
class baseClass { }

$a = new baseClass;

if (
$a instanceof basicClass) {
    echo
"Hello World";
}
?>

 

 

静态函数变量(Static function variables)

所有的静态变量现在在编译时进行处理,这允许开发者通过引用来指定静态变量。这个变化提高了效率但意味着不可能对静态变量进行间接引用。

 

函数中通过引用方式传递的参数允许有默认值

例如:

<?php
function my_function(&$var = null) {
    if (
$var === null) {
        die(
"$var needs to have a value");
    }
}
?>

 

__autoload()

 

在初始化一个未定义的类时,__autoload()拦截函数(interceptor function)将被自动调
用。类名将作为__autoload()拦截函数唯一参数传递给它。

<?php
function __autoload($className) {
    include_once
$className . ".php";
}

$object = new ClassName;
?>

 

    所有方法调用和属性访问都可以通用 __call(), __get() 和 __set()方法来重载。

 


<?php
class Setter {
   
public $n;
   
public $x = array("a" => 1, "b" => 2, "c" => 3);

    function
__get($nm) {
        print
"Getting [$nm]/n";

        if (isset(
$this->x[$nm])) {
           
$r = $this->x[$nm];
            print
"Returning: $r/n";
            return
$r;
        } else {
            print
"Nothing!/n";
        }
    }

    function
__set($nm, $val) {
        print
"Setting [$nm] to $val/n";

        if (isset(
$this->x[$nm])) {
           
$this->x[$nm] = $val;
            print
"OK!/n";
        } else {
            print
"Not OK!/n";
        }
    }
}

$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump($foo);
?>

 

 

示例: __call()

<?php
class Caller {
    var
$x = array(1, 2, 3);

    function
__call($m, $a) {
        print
"Method $m called:/n";
       
var_dump($a);
        return
$this->x;
    }
}

$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_dump($a);
?>

 

 

PHP 5/Zend Engine 2.0的改进

PHP 5/Zend Engine 2.0的改进Warton译 2003-09-12重庆近两年没有使用PHP写过程序了,今天要用PHP,就在网上查了查,看到了PHP5,一时之间兴趣又大了起来,于是翻译...
  • warton
  • warton
  • 2003年10月22日 01:21
  • 1101

PHP的核心Zend Engine

相信很多人都听说过 Zend Engine 这个名词,也有很多人知道 Zend Engine 就是 PHP 语言的核心,但若要问一句:Zend Engine 到底存在于何处?或者说,Zend Engi...
  • rongyongfeikai2
  • rongyongfeikai2
  • 2014年02月22日 13:06
  • 4443

zendloader安装

windows IIS+PHP5.3 zend_loader成功安装运行,PHP加密解密 很简单: 1、安装PHP(非线程安全 php-5.3.8-nts-Win32-VC9-x86.msi)时,...
  • martin2350
  • martin2350
  • 2012年09月19日 10:13
  • 2980

mac下安装xdebug时报“The Zend Engine API version 2xxxxxxxx which is installed, is newer.”解决方法

报这个问题,官方的FAQ中已经说的很明白,见[http://xdebug.org/docs/faq#api]。 这种情下,phpize输出如下: $ phpize -v Configur...
  • topwangpeng
  • topwangpeng
  • 2015年02月09日 09:49
  • 794

Changes in PHP 5/Zend Engine 2.0

Changes in PHP 5/Zend Engine 2.0New Object Model.PHPs handling of objects has been completely rewrit...
  • upchina
  • upchina
  • 2003年07月02日 16:20
  • 633

linux php-5.3.28版本升级到php-5.5.25

为了方便,在linux环境下安装了lnmp集成环境,但是后来在项目中,由于php5.3版本不支持数组以 ['a','b'] 的形式书写,所以需要更新php到5.3以上版本。 lnmp中php是以co...
  • xsgnzb
  • xsgnzb
  • 2015年05月20日 10:34
  • 3568

zend framework2 相对于zend framework1 的改进

zend framework(一下简称zf)作为zend公司的一个重要产品是php的开源框架,基于mvc模式,是php圈内主流开发框架之一,2012年9月5日zend公司正式发布了zf2, 下面...
  • vspeter
  • vspeter
  • 2013年03月08日 09:16
  • 1998

PHP5.2+fastcgi安装Zend Optimizer的安装方法

使用fastcgi、Zend Optimizer3.3.3、PHP5.2.17,有如下问题: 使用“非线程版本”(php-5.2.17-nts-Win32-VC6-x86.zip),会提示:...
  • English0523
  • English0523
  • 2016年08月16日 14:19
  • 1885

[李景山php]HTTP/2.0 相比1.0有哪些重大改进

https://www.zhihu.com/question/34074946
  • lijingshan34
  • lijingshan34
  • 2017年05月05日 10:59
  • 198

Xdebug bad Zend API Version Number

I am having trouble upgrading xdebug for MAMP. I was running version 2.2.0 and there was a known iss...
  • meegomeego
  • meegomeego
  • 2014年07月11日 15:59
  • 1894
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP 5/Zend Engine 2.0的改进(二)
举报原因:
原因补充:

(最多只允许输入30个字)