分享
 
 
 

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

王朝php·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

[接上页]

PHP 5/Zend Engine 2.0的改进

PHP5允许常量中包含表达式,但在编译时常量中的表达式将被计算,

因此常量不能在运行中改变它的值。

<?php

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 Circle {

function draw() {

print "Circle\n";

}

}

class Square {

function draw() {

print "Square\n";

}

}

function ShapeFactoryMethod($shape) {

switch ($shape) {

case "Circle":

return new Circle();

case "Square":

return new Square();

}

}

ShapeFactoryMethod("Circle")->draw();

ShapeFactoryMethod("Square")->draw();

?>

静态类中的静态成员变量可初始化

例如:

<?php

class foo {

static $my_static = 5;

}

print foo::$my_static;

?>

静态方法(Static Methods)

PHP5引入了关键字'static'来定义一个静态方法,这样可以从对象外进行调用。

例如:

<?php

class Foo {

public static function aStaticMethod() {

// ...

}

}

Foo::aStaticMethod();

?>

虚拟变量$this在被定义为静态(static)的方法中无效。

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()方法来重载。

例: __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);

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有