第1次亲密接触PHP5(1)
文章来源:PHPBuilder.com
原作者:Luis Argerich
翻译:erquan
erquan注:本人现还未来得及体验PHP5,只是翻译一篇老外的文章。
以下均由erquan翻译,第1次作这些的事情希望没有误导大家。有些不准的地方请谅解。
大家看这样的行不行,如果行的话,偶就翻译完,不行就翻译了,免得误导了大家,也累哦。。。。:)
转贴时请注明文章来源,谢谢:)
PHP5的正式版还没发布,但我们可以学习、体验下开发版给我们带来的PHP新特性。
本文将集中介绍以下3大PHP5新功能:
* 新对象模式
* 结构化异常处理
* 名称空间
在正式开始之前,请注意:
*文章中的部分例子用PHP4的方法实现,只是为了增强文章的可读性
*本文所描述的新特性可能会与正式版特性有出入,请以正式版本为准。
* 新对象模式
PHP5新的对象模式在PHP4的基础上做了很大的"升级",你看起来会很像JAVA:(。
下面的一些文字将对它做一些简单介绍,并且附有小例子让您开始体验PHP5的新特性
come on~~:)
* 构造函数 和 析构函数
* 对象的引用
* 克隆对象
* 对象的3种模式:私有、公共和受保护
* 接口
* 虚拟类
* __call()
* __set()和__get()
* 静态成员
构造函数 和 析构函数
在PHP4中,和类名一样的函数被默认为该类的构造器,并且在PHP4没有析构函数的概念。(二泉 注:这点和JAVA一样)
但从PHP5开始,构造函数被统一命名为 __construct,而且有了析构函数:__destruct(二泉 注:这点却和Delphi一样,可见PHP5吸收了众多的成熟的OO思想,可C可贺~~):
例1:构造函数和析构函数
class foo {
var $x;
function __construct($x) {
$this->x = $x;
}
function display() {
print($this->x);
}
function __destruct() {
print("bye bye");
}
}
$o1 = new foo(4);
$o1->display();
?>
运行完你将看到输出了"bye bye",这是因为类在终止的时候调用了__destruct()析构函数~~
对象的引用
正如你所知道的一样,在PHP4中,对一个函数或方法传递一个变量时,实际上是传递了一个copy,除非你用了传址符&来声明
你在做一个变量的引用。在PHP5中,对象总是以引用的方式被指定:
例2:对象的引用
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>
(二泉 注:你将看到"Oh my god!"的输出)
克隆对象
如上,如果有时不想得到对象的引用而想用copy时,怎么办?在PHP5提供的 __clone 方法中实现:
例3:克隆对象
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5);
if($o1->getX() != $o2->getX()) print("Copies are independant");
?>
克隆对象的方法在已被应用到很多语言中,所以你不必担心它的性能:)。
Private, Public 和 Protected
在PHP4中,你可以在对象的外面操作它任意的方法和变量--因为方法和变量是公用的。在PHP5引用了3种模式来控制
对变量、方法的控制权限:Public(公用的)、Protected(受保护)和Private(私有)
Public:方法和变量可以在任意的时候被访问到
Private:只能在类的内部被访问,子类也不能访问
Protected:只能在类的内部、子类中被访问
例子4:Public, protected and private
class foo {
private $x;
public function public_foo() {
print("I'm public");
}
protected function protected_foo() {
$this->private_foo(); //Ok because we are in the same class we can call private methods
print("I'm protected");
}
private function private_foo() {
$this->x = 3;
print("I'm private");
}
}
class foo2 extends foo {
public function display() {
$this->protected_foo();
$this->public_foo();
// $this->private_foo(); // Invalid! the function is private in the base class
}
}
$x = new foo();
$x->public_foo();
//$x->protected_foo(); //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo(); //Invalid private methods can only be used inside the class
$x2 = new foo2();
$x2->display();
?>
提示:变量总是私有形式,直接访问一个私有变量并不是一个好的OOP思想,应该用其他的方法来实现 set/get 的功能
接口
正如你知道的一样,在 PHP4 中实现继承的语法是"class foo extends parent"。无论在PHP4 还是在 PHP5 中,都不支持多重继承即只能从一个类往下继承。 PHP5中的"接口"是这样的一种特殊的类:它并不具体实现某个方法,只是用来定义方法的名称和拥有的元素,然后通过关键字将它们一起引用并实现具体的动作。
Example 5: 接口
interface displayable {
function display();
}
interface printable {
function doprint();
}
class foo implements displayable,printable {
function display() {
// code
}
function doprint() {
// code
}
}
?>
这对代码的阅读性和理解性是非常有帮助的:读到该类时,你就知道foo包含了接口displayable和printable,而且一定有print()(二泉 注:应该是doprint())方法和display()方法。不必知道它们内部是如何实现就可轻松操作它们只要你看到foo的声明。
虚拟类
虚拟类是一种不能被实例化的类,它可以像超类一样,可以定义方法和变量。
在虚拟类中还可以定义虚拟的方法,而且在该方法也不能在该类是被实现,但必须在其子类中被实现
Example 6: 虚拟类
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$this->x = $x;
}
}
class foo2 extends foo {
function display() {
// Code
}
}
?>
__call()方法
在PHP5时,如果你定义了 __call()方法,当你试图访问类中一个不存在的变量或方法时,__call()就会被自动调用:
Example 7: __call
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
}
}
$x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
这个特殊的方法被习惯用来实现"方法重载",因为你依靠一个私有参数来实现并检查这个参数:
Exampe 8: __call 实现方法重载
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
}
private function foo_for_int($x) {
print("oh an int!");
}
private function foo_for_string($x) {
print("oh a string!");
}
}
$x = new Magic();
$x->foo(3);
$x->foo("3");
?>
__set()方法 和 __get()方法
当访问或设置一个未定义的变量时,这两个方法将被调用:
Example 9: __set and __get
class foo {
function __set($name,$val) {
print("Hello, you tried to put $val in $name");
}
function __get($name) {
print("Hey you asked for $name");
}
}
$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

edge瀏覽器自帶了翻譯功能讓用戶們可以隨時隨地的進行翻譯,為用戶們帶來了極大的便利,可也有不少的用戶們表示自帶的翻譯網頁不見了,那edge瀏覽器自帶的翻譯網頁不見了怎麼辦?下面就讓本站來介紹一下edge瀏覽器自備的翻譯網頁不見了怎麼恢復方法吧。 edge瀏覽器自帶的翻譯網頁不見了怎麼恢復方法 1、檢查是否啟用了翻譯功能:在Edge瀏覽器中,點擊右上角的三個點圖標,然後選擇「設定」選項。在設定頁面的左側,選擇“語言”選項。確保“翻譯&rd

php5和php8的差異在效能、語言結構、型別系統、錯誤處理、非同步程式設計、標準函式庫函數和安全性等方面。詳細介紹:1、效能提升,PHP8相對於PHP5來說在效能方面有了巨大的提升,PHP8引入了JIT編譯器,可以對一些高頻執行的程式碼進行編譯和最佳化,從而提高運行速度;2、語言結構改進,PHP8引入了一些新的語言結構和功能,PHP8支援命名參數,允許開發者透過參數名稱而不是參數順序等等。

搜狗瀏覽器怎麼翻譯?我們平常會用搜狗瀏覽器查閱資料的時候,會遇到一些全是英文的網站,因為看不懂英文對網站瀏覽起來就很困難,這樣也十分的不方便,遇到這種情況沒有關係!搜狗瀏覽器有內建翻譯按鈕,只要點擊一下,搜狗瀏覽器就會自動幫你翻譯整個網頁?如果你不會操作的話,小編整理搜狗瀏覽器怎麼翻譯的具體方法步驟,不會的話跟著我往下看吧!搜狗瀏覽器怎麼翻譯1、開啟搜狗瀏覽器,點選右上角的譯字圖示2、選擇翻譯文字類型,然後輸入需要翻譯的文字3、搜狗瀏覽器就會自動翻譯文字,至此操作完成以上搜狗瀏覽器怎麼翻譯的全部內

7月22日消息,今日,小米澎湃OS官微宣布小愛翻譯迎來升級,實時字幕新增日韓語翻譯,無字幕視頻、直播會議實時轉錄翻譯。面對面同聲傳譯支持12種語言互譯,包括中文、英語、日語、韓語、俄語、葡萄牙語、西班牙語、義大利語、法語、德語、印尼語、印地語。以上功能目前僅支援以下三款新機:小米MIXFold4小米MIXFlipRedmiK70至尊版據悉,2021年,小愛同學AI字幕宣布加入日文、韓文翻譯。 AI字幕採用小米自研同聲傳譯技術,提供更快速、穩定且精準的字幕閱讀體驗。 1.官方稱,小愛翻譯不僅能在影音場

一、今日頭條發布文章怎麼有收益?今日頭條發布文章獲得更多收益方法! 1.開通基礎權益:原創文章選擇投放廣告可獲得收益,影片必須原創橫屏才會有收益。 2.開通百粉權益:粉絲量達百粉以上,微頭條、原創問答創作及問答均可獲得收益。 3.堅持原創作品:原創作品包含文章、微標題及問題等,要求300字以上。注意違規抄襲作品作為原創發布,會被扣信用分,即使有收益也會被扣除。 4.垂直度:做專業領域一類的文章,不能隨意跨領域寫文章,會得不到合適的推薦,達不到作品的專和精,難以吸引粉絲讀者。 5.活躍度:活躍度高,

瀏覽器通常都會自備翻譯功能,這樣在瀏覽外文網站時就不用擔心看不懂啦!谷歌瀏覽器也不例外,但是有用戶發現自己打開谷歌瀏覽器的翻譯功能時沒有反應,失效了,這該如何處理?可以試試小編找到的最新解決方案。 操作教學: 點選右上角三個點,點選設定。 點擊新增語言,新增英文和中文,並為他們做出下面設置,英文設定詢問是否翻譯此語言網頁,中文設定以這種語言顯示網頁,並且中文要移至頂部,才能設定為預設語言。 如果你打開網頁沒有彈出是否翻譯選項,右鍵選擇翻譯中文,ok。

谷歌瀏覽器翻譯不了中文怎麼回事?眾所周知Google瀏覽器是自備翻譯的瀏覽器之一,大家在這款瀏覽器裡瀏覽其他國家文字的頁面時,瀏覽器會自動將頁面翻譯成中文,最近有部分用戶表示,自己在瀏覽器網頁的時候無法進行中文翻譯,這個時候我們需要在設定裡進行修復。接下來小編就帶給大家谷歌瀏覽器翻譯不了中文解決辦法,有興趣的朋友快來看看。 Google瀏覽器翻譯不了中文解決方案1、修改本地的hosts文件hosts是一個沒有擴展名的系統文件,可以用記事本等工具打開,主要作用是定義IP地址和主機名的映射關係,是一個映射IP地址

基於JavaScript建立即時翻譯工具引言隨著全球化的需求日益增長,跨國交流與交流的頻繁發生,即時翻譯工具成為了一種非常重要的應用。我們可以利用JavaScript和一些現有的API來建立一個簡單但實用的即時翻譯工具。本文將會介紹如何基於JavaScript來實現這個功能,並附有程式碼範例。實作步驟步驟1:建立HTML結構首先,我們需要建立一個簡單的HTML
