PHP 5/Zend Engine 2.0的改進(二) (轉)
/Develop/read_article.?id=21008">[接上頁]
5/ Engine 2.0的改進:namespace prefix = o ns = "urn:schemas--com::office" />
允許常量中包含,但在編譯時常量中的表示式將被計算,
因此常量不能在執行中改變它的值。
class Bar {const a = 1<<0;
const b = 1<<1;
const c = a | b;
}
?>
以前程式碼中的自定義類或方法中雖然未定義"const”關鍵字,
但無需修改就可以執行。
異常(Exceptions)
中沒異常處理,PHP5引入了與其它與語言相似的異常處理模型。
class MyExceptionFoo extends Exception {
function __construct($exception) {
parent::__construct($exception);
}
}
try {
throw new MyExceptionFoo("Hello");
} catch (MyExceptionFoo $exception) {
print $exception->getMessage();
}
?> ?php>
以前程式碼中的使用者自定義類或方法中雖未定義'catch', 'throw' 和 'try'關鍵字,但無需修改
就可以執行。
返回值
在PHP4中,函式不可能返回物件的值並對返回的物件進行方法,隨著Zend Engine 2
(ZEND引擎2)的出現,以下呼叫成為可能:
class Circle {
function draw() {
print "Circle
";
}
}
class Square {
function draw() {
print "Square
";
}
}
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;
?> ?php>
靜態方法(Static Methods)
PHP5引入了關鍵字'static'來定義一個靜態方法,這樣可以從物件外進行呼叫。
例如:
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
?> ?php>
虛擬變數$this在被定義為靜態(static)的方法中無效。
Instanceof
PHP5引入了 “instanceof“關鍵字來確定一個物件是否是某一個物件的例項,或某一個物件的派生,或使用了某一個介面。
示例:
class baseClass { }
$a = new baseClass;
if ($a instanceof basicClass) {
echo "Hello World";
}
?> ?php>
靜態函式變數(Static function variables)
所有的靜態變數現在在編譯時進行處理,這允許開發者透過引用來指定靜態變數。這個變化提高了但意味著不可能對靜態變數進行間接引用。
函式中透過引用方式傳遞的引數允許有預設值
例如:
function my_function(&$var = null) {
if ($var === null) {
die("$var needs to have a value");
}
}
?>?php>
__autoload()
在初始化一個未定義的類時,__autoload()攔截函式(interceptor function)將被自動調
用。類名將作為__autoload()攔截函式唯一引數傳遞給它。
例如:
function __autoload($className) {
include_once $className . ".php";
}
$ = new ClassName;
?> ?php>
方法和屬性呼叫的過載
所有方法呼叫和屬性訪問都可以通用 __call(), __get() 和 __set()方法來過載。
例: __get() 和 __set()
class Setter {
public $n;
public $x = array("a" => 1, "b" => 2, "c" => 3);
function __get($nm) {
print "Getting [$nm]
";
if (isset($this->x[$nm])) {
$r = $this->x[$nm];
print "Returning: $r
";
return $r;
} else {
print "Nothing!
";
}
}
function __set($nm, $val) {
print "Setting [$nm] to $val
";
if (isset($this->x[$nm])) {
$this->x[$nm] = $val;
print "OK!
";
} else {
print "Not OK!
";
}
}
}
$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump($foo);
?> ?php>
示例: __call()
class Caller {
var $x = array(1, 2, 3);
function __call($m, $a) {
print "Method $m called:
";
var_dump($a);
return $this->x;
}
}
$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_dump($a);
?> ?php>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-962873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Changes in PHP 5/Zend Engine 2.0 (轉)PHP
- PHP 危矣?Zend Engine 團隊宣佈脫離 Rogue WavePHP
- Zend Studio使用教程:使用PHP 7進行開發(二)PHP
- Zend Framework 2.0資料彙總Framework
- PHP5.3安裝Zend Guard Loader代替Zend OptimizerPHP
- 微軟攜手Zend推動PHP語言發展(轉)微軟PHP
- Zend Framework和Smarty在php中的配置FrameworkPHP
- more effective entity bean(新的改進entity bean的效能的七條(EJB2.0版)) (轉)Bean
- Zend Optimizer 配置指南 (轉)
- php二維陣列改鍵名的方法PHP陣列
- 【譯】.NET 7 中的效能改進(二)
- 第二章. Dump程式的改進
- Zend Guard 5 詳細的使用配置教程
- 【翻譯】.NET 5中的效能改進
- 改進AI/ML部署的5種方法AI
- 【譯】.NET 5 中的診斷改進
- PHP 核心分析:Zend 虛擬機器PHP虛擬機
- 用 ASP.NET 2.0 改進的 ViewState 加快網站速度ASP.NETView網站
- NEO改進協議提案5(NEP-5)協議
- 全新改進的HTML5表單建立HTML
- PHP 核心分析(2):ZTS和zend_tryPHP
- 新手筆記-持續改進實踐:開發計劃的改進 (轉)筆記
- PHP Lex Engine Sourcecode Analysis(undone)PHP
- php二進位制安全的含義PHP
- OnionArch 2.0 - 基於DDD的洋蔥架構改進版開源架構
- php5.6安裝Zend Opcache擴充套件PHPopcache套件
- 轉-ArcGIS Engine中的License設定
- 資料重新整理中的並行改進(二)並行
- 記一次資料同步需求的改進(二)
- 改進你的c#程式碼的5個技巧(三)C#
- 改進你的c#程式碼的5個技巧(四)C#
- 改進c#程式碼的5個常用的小技巧C#
- 用“歸併”改進“快速排序” (轉)排序
- apache2.2+PHP5.2.3+mysql5.0+gd+zend+phpmyadminApachePHPMySql
- 紅帽企業 Linux AS 4 的改進(轉)Linux
- 談軟體開發過程的改進 (轉)
- php寫二進位制檔案PHP
- 外觀模式及其改進(二):抽象外觀類的引入模式抽象