首頁 php教程 php手册 PHP5魔術方法的调用实例

PHP5魔術方法的调用实例

Jun 13, 2016 am 10:51 AM
php5 函數 實例 物件 方法 呼叫 魔術

PHP5魔術方法
 
魔术函数:  
 
1。__construct()
 
  构造函数 : 实例化对象时被调用,
 
  当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。
 
2。__destruct()
 
析构函数 : 当删除一个对象或对象操作终止时被调用(程序结束后对象就摧毁)。
 
永远都是最后执行的。
 
3。__call()
 
  对象调用某个方法,
 
  若方法存在,则直接调用;
 
若不存在,则会去调用__call函数。
 
4。__get()
 
  读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
 
  5。__set()
 
  设置一个对象的属性时,
 
  若属性存在,则直接赋值;
 
  若不存在,则会调用__set函数。
 
  6。__toString()
 
  打印一个对象的时被调用。如echo $obj;或print $obj;
 
  7。__clone()
 
  克隆对象时被调用。如:$t=new Test();$t1=clone $t;
 
  8。__sleep()
 
  serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
 
  9。__wakeup()
 
  unserialize时被调用,做些对象的初始化工作。
 
  10。__isset()
 
  检测一个对象的属性是否存在时被调用。如:isset($c->name)。
 
  11。__unset()
 
  unset一个对象的属性时被调用。如:unset($c->name)。
 
  12。__set_state()
 
  调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
 
  13。__autoload()
 
  实例化一个对象时,如果对应的类不存在,则该方法被调用。
 
  魔术常量
 
  1。__LINE__
 
  返回文件中的当前行号。
 
  2。__FILE__
 
  返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
 
  3。__FUNCTION__
 
  返回函数名称(PHP 4.3.0 新加)。自PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在PHP 4 中该值总是小写字母的。
 
  4。__CLASS__
 
  返回类的名称(PHP 4.3.0 新加)。自PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在PHP 4 中该值总是小写字母的。
 
  5。__METHOD__
 
  返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
 
  (1)初识魔术方法
 
  Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。
 
PHP | 魔术方法| __toString(),__clone(),__call(),__autoload() 详解
 
__toString()
 
如果我有一个类:
 
class Person
 
{
 
private $name = “”;
 
private $age = 0;
 
function __construct($name = “”, $age = “”)
 
{
 
$this->name = $name;
 
$this->age = $age;
 
}
 
function say()
 
{
 
echo “name:”.$this->name.”
”.”age:”.$this->age.”
”;  
 
}
 
}
 
现在我去实例化这个类,然后去打印这个实例:
 
$p1 = new person(“liuzy”,20);
 
echo $p1;  //直接打印会出错
 
显然这样直接打印对象是会出现错误的,因为对象是引用句柄,不能直接打印。这时,我们可以用到__toString()方法。我们在Person类里加一个__toString()方法:
 
function __toString()
 
{
 
return “I am  Person,my name is “.$this->name.”
”;
 
}
 
然后再刷新页面,发现什么了?
 
现在我们明白,__toString()是在直接打印对象时执行的方法,我们可以用该方法打印类的一些相关信息。注意:是两个下划线,方法必须有返回值。
 
__clone()
 
我们知道对象是可以直接赋值的,比如
 
$p2 = $p1;   //这里是一个对象有两个引用
 
那么我执行:
 
$p1->say();
 
$p2->say();
 
是都可以执行的,而且效果一样。
 
我们还有一种方法:
 
$p3 = clone $p1;     //注意clone是克隆关键字,这里与上面的不同是$p3是一个新的对象。
 
同时我们在类里加入一个方法:
 
function __clone()
 
{
 
$this->name = “我是副本”;  //注意:这里的$this是克隆产生的对象本身,不是当前类
 
}
 
然后我们执行:
 
$p3->say();
 
打印出:
 
name:我是副本
 
age:20
 
到这里我们明白,__clone()方法是在克隆对象的时候执行的方法,它的作用是对新克隆出来的副本
 
进行属性初始化等操作。
 
__call()
 
这个方法的主要功能是:在该类的实例调用一个不存在的方法时,执行该__call()方法。注意需要提前在类里
 
声明:
 
function __call($fname,$argus)
 
{
 
echo “你调用的方法:”.$fname.”不存在
”;
 
echo “参数是”.print_r($argus);
 
}
 
声明时包含两个参数,第一个参数是string型,是调用的不存在的方法的方法名($fname),第二个参数是
 
array型,是调用的不存在的方法的参数($argus)。
 
__autoload()
 
我们在平时调用一个类的时候,必须要先将该类所在的文件引入(include “xxx.php”),如果我们在一个页里调用的类很多,那么我们不得不使用许多的include “xxx.php”。显然这样很麻烦。
 
__autoload()方法可以帮我们解决这个问题。
 
比如我们将上面的那个Person类所在的文件定义为Person_class.php  ,
 
再新建一个php文件  test.php,编辑内容:
 
function  __autoload($calssName)
 
{
 
include $className.”_class.php”;  //看到这也许你就明白了吧?哈哈
 
}
 
$p = new Person(“mifan”, 22);
 
$p->say();
 
这样执行该test.php页面就不会出现错误了。
 
__autoload()方法是在生命不存在的类时调用的方法,它有一个string类型的参数是声明该不存在类的类名。
 
当然,类文件的命名也是很有讲究的。最好是和类有关系,比如Person_class.php
 
 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

微信刪除的人如何找回(簡單教學告訴你如何恢復被刪除的聯絡人) 微信刪除的人如何找回(簡單教學告訴你如何恢復被刪除的聯絡人) May 01, 2024 pm 12:01 PM

而後悔莫及、人們常常會因為一些原因不小心刪除某些聯絡人、微信作為一款廣泛使用的社群軟體。幫助用戶解決這個問題,本文將介紹如何透過簡單的方法找回被刪除的聯絡人。 1.了解微信聯絡人刪除機制這為我們找回被刪除的聯絡人提供了可能性、微信中的聯絡人刪除機制是將其從通訊錄中移除,但並未完全刪除。 2.使用微信內建「通訊錄恢復」功能微信提供了「通訊錄恢復」節省時間和精力,使用者可以透過此功能快速找回先前刪除的聯絡人,功能。 3.進入微信設定頁面點選右下角,開啟微信應用程式「我」再點選右上角設定圖示、進入設定頁面,,

手機版龍蛋孵化方法大揭密(一步一步教你如何成功孵化手機版龍蛋) 手機版龍蛋孵化方法大揭密(一步一步教你如何成功孵化手機版龍蛋) May 04, 2024 pm 06:01 PM

手機遊戲成為了人們生活中不可或缺的一部分,隨著科技的發展。它以其可愛的龍蛋形象和有趣的孵化過程吸引了眾多玩家的關注,而其中一款備受矚目的遊戲就是手機版龍蛋。幫助玩家們在遊戲中更好地培養和成長自己的小龍,本文將向大家介紹手機版龍蛋的孵化方法。 1.選擇合適的龍蛋種類玩家需要仔細選擇自己喜歡並且適合自己的龍蛋種類,根據遊戲中提供的不同種類的龍蛋屬性和能力。 2.提升孵化機的等級玩家需要透過完成任務和收集道具來提升孵化機的等級,孵化機的等級決定了孵化速度和孵化成功率。 3.收集孵化所需的資源玩家需要在遊戲中

手機字體大小設定方法(輕鬆調整手機字體大小) 手機字體大小設定方法(輕鬆調整手機字體大小) May 07, 2024 pm 03:34 PM

字體大小的設定成為了重要的個人化需求,隨著手機成為人們日常生活的重要工具。以滿足不同使用者的需求、本文將介紹如何透過簡單的操作,提升手機使用體驗,調整手機字體大小。為什麼需要調整手機字體大小-調整字體大小可以使文字更清晰易讀-適合不同年齡段用戶的閱讀需求-方便視力不佳的用戶使用手機系統自帶字體大小設置功能-如何進入系統設置界面-在在設定介面中找到並進入"顯示"選項-找到"字體大小"選項並進行調整第三方應用調整字體大小-下載並安裝支援字體大小調整的應用程式-開啟應用程式並進入相關設定介面-根據個人

golang函數動態建立新函數的技巧 golang函數動態建立新函數的技巧 Apr 25, 2024 pm 02:39 PM

Go語言提供了兩種動態函數創建技術:closures和反射。 closures允許存取閉包作用域內的變量,而反射可使用FuncOf函數建立新函數。這些技術在自訂HTTP路由器、實現高度可自訂的系統和建置可插拔的元件方面非常有用。

C++ 函數命名中參數順序的考慮 C++ 函數命名中參數順序的考慮 Apr 24, 2024 pm 04:21 PM

在C++函數命名中,考慮參數順序至關重要,可提高可讀性、減少錯誤並促進重構。常見的參數順序約定包括:動作-物件、物件-動作、語意意義和遵循標準函式庫。最佳順序取決於函數目的、參數類型、潛在混淆和語言慣例。

如何選擇手機膜,保護你的手機螢幕(選購手機膜的幾個重點與技巧) 如何選擇手機膜,保護你的手機螢幕(選購手機膜的幾個重點與技巧) May 07, 2024 pm 05:55 PM

手機膜成為了必不可少的配件之一,隨著智慧型手機的普及。延長其使用壽命,選擇合適的手機膜可以保護手機螢幕。幫助讀者選出最適合自己的手機膜、本文將介紹選購手機膜的幾個重點與技巧。了解手機膜的材質及類型PET膜,TPU等、手機膜有多種材質,包括強化玻璃。 PET膜較為柔軟、強化玻璃膜具有較好的耐刮花性能,TPU則具有較好的防震性能。可根據個人偏好及需求來決定,在選擇時。考慮螢幕的保護程度不同類型的手機膜對螢幕的保護程度不同。 PET膜則主要起防刮花作用,強化玻璃膜具有較好的耐摔性能。可以選擇具有較好

如何在Java中寫出高效和可維護的函數? 如何在Java中寫出高效和可維護的函數? Apr 24, 2024 am 11:33 AM

編寫高效且可維護的Java函數的關鍵在於:保持簡潔。使用有意義的命名。處理特殊情況。使用適當的可見性。

如何將 MySQL 查詢結果陣列轉換為物件? 如何將 MySQL 查詢結果陣列轉換為物件? Apr 29, 2024 pm 01:09 PM

將MySQL查詢結果陣列轉換為物件的方法如下:建立一個空物件陣列。循環結果數組並為每一行建立一個新的物件。使用foreach迴圈將每一行的鍵值對賦給新物件的對應屬性。將新物件加入到物件數組中。關閉資料庫連線。

See all articles