程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Zend引擎的發展歷程(1)

Zend引擎的發展歷程(1)

編輯:關於PHP編程

Zeev討論了Zend引擎帶來的對象模型,特別提到它與PHP的前幾個版本中的模型有什麼不同.當1997年夏天,我們開發出PHP 3, 我們沒有計劃要使PHP具備面向對象的能力. 當時沒有任何與類和對象有關的想法. PHP3是一個純粹面向過程的語言. 但是,在1997.8.27的晚上PHP3 alpha版中增加了對類的支持. 增加一個新特性給PHP,當時僅需要極少的討論,因為當時探索PHP的人太少. 於是從1997年八月起, PHP邁出了走向面向對象編程語言的第一步.

確實,這只是第一步. 因為在這個設計中只有極少的相關的想法,對於對象的支持不夠強大. 這個版本中使用對象僅是訪問數組的一個很酷的方法而已. 取代使用$foo[“bar”],你可以使用看起來更漂亮的$foo->bar. 面向對象方法的主要的優勢是通過成員函數或方法來儲存功能. 例子圖1中顯示了一個典型的代碼塊. 但是它和例圖2中的做法其實並沒有太大不同.

PHP 3 object-oriented programming PHP3中的面向對象編程

<?php    class Example    {        var $value = "some value";        function PrintValue()        {            print $this->value;        }    }    $obj = new Example();    $obj->PrintValue(); ?>

PHP 3 structural programming PHP3 PHP3中的結構化編程

<?php    function PrintValue($arr)    {        print $arr["value"];    }    function CreateExample()    {        $arr["value"] = "some value";        $arr["PrintValue"] = "PrintValue";        return $arr;    }    $arr = CreateExample();    //Use PHP's indirect reference    $arr["PrintValue"]($arr); ?>

以上我們在類中寫上兩行代碼,或者顯示地傳遞數組給函數. 但考慮到PHP3中這兩種選擇並沒有任何不同,我們仍然可以僅把對象模型當成一種”語法上的粉飾”來訪問數組.

想要用PHP來進行面向對象開發的人們,特別是想使用設計模式的人,很快就發現他們碰壁了. 幸運地,當時(PHP3時代)沒有太多人想用PHP來進行面向對象開發.

PHP4改變了這種情況. 新的版本帶來了引用(reference)的概念, 它允許PHP的不同標識符指向內存中的同一個地址. 這意味著你可以使用兩個或更多的名稱來給同一個變量命名,就像例圖3那樣.

 PHP 4 references PHP4中的引用

<?php    $a = 5;    //$b points to the same place in memory as $a $b與$a指向內存中同個地址    $b = &$a;    //we're changing $b, since $a is pointing to 改變$b,指向的地址改變    //the same place - it changes too $a指向的地址也改變    $b = 7;    //prints 7  輸出7    print $a; ?> 

圖3

由於構建一個指向彼此的對象網絡是所有面向對象設計模式的基礎,這個改進具有非常重大的意義.當引用允許建立更多強大的面向對象應用程序, PHP對待對象和其它類型數據相同的做法帶給開發者極大的痛苦.就像任何PHP4的程序員將會告訴你的, 應用程序將會遭遇WTMA(Way Too Many Ampersands過多&)綜合症. 如果你想構建一個實際應用,你會感到極為痛苦,看看例圖4你就明白.

1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved