程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP面向對象開發之魔術函數詳解

PHP面向對象開發之魔術函數詳解

編輯:關於PHP編程

php中魔術函數包括有tostring、call、clone、autoload幾個常用的函數,希望此教程對各位朋友會有所幫助。

面向對象開發總結

1.對象的描述和配置。(可以理解為對對象的輸出文字描述)
2.對象方法的一場處理。(可以理解為出現異常時候,自定義更人性化的錯誤信息)
3.克隆對象的應用。(可以理解為在原始對象上,克隆出一樣的另一個對象,注意是另一個。)
4.自動載入對象的方法。(可以理解為引用)

1.對象描述和配置

方法名:__tostring()
格式:

 代碼如下 復制代碼 class My {
function __tostring() {
return "這裡寫這個類的文字描述"; //要用return,echo會出錯。
}
}
$p = new My();
echo $p;

實例:

 代碼如下 復制代碼 <?php
class My {
 function __toString() {
  return "這個類的作用是,保衛地球。";
 }
}
$p = new My();
echo $p;
?>

2.對象方法的異常處理

調用一些不存在的對象方法的異常處理,是程序正常運行。
方法名:__call($funname,$arr_value)
格式:

 代碼如下 復制代碼 class My {
function __call($n,$v) {
echo "錯誤的方法名:".$n;
echo "錯誤的參數:".$v;
}
}

實例:

 代碼如下 復制代碼

<?php
class My {
 function __toString() {
  return "這個類的作用是,保衛地球。";
 }

 function __call ($n,$v) {
  echo "錯誤的方法<b>".$n."</b><br />";
    echo "錯誤的值<b>".print_r($v)."</b>"; //值是以數組方式傳遞的,所以要用print_r。
 }
}
$p = new My();
$p->demo("第一",6);
?>

3.對象的克隆

通過克隆方式可以在內存中生成兩個一樣的對象或升級原對象。(不是簡單的賦值,而是在內存中開兩塊內存,克隆出的和被克隆的是2個屬性方法一樣的不同的兩個對象)
方法名:__clone()
關鍵字:clone
格式:

 代碼如下 復制代碼 class My {
function __clone() {
echo "克隆時自動調用的函數";
}
}
$a = new My();
$b = clone $a;


實例:

 代碼如下 復制代碼

<?php
class My {
 public $name = "小豬";
 function __toString() {
  return "這個類的作用是,保衛地球。";
 }

 function __call ($n,$v) {
  echo "錯誤的方法<b>".$n."</b><br />";
    echo "錯誤的值<b>".print_r($v)."</b>"; //值是以數組方式傳遞的,所以要用print_r。
 }
}
$p = new My();
$b = clone $p;

echo $b->name="小豬頭"."<br />"; //這是克隆並修改後的對象,如果使用 $b = $p,那修改$b->name="小豬頭";後,再輸出$p,也會被修改。
echo $p->name; //這是原對象,它已經被$b克隆了,其他都一樣,但是他們是獨立的。
?>


4.自動載入對象的方法


快速取得對象名稱並自動載入進當前頁面
方法名:__autoload()
格式:

 代碼如下 復制代碼 function __autoload($class_n) {
include($class_n.".php");
}
$p = new MyPc(); //自動調用執行如下
$d = new demo(); //include("mypc.php")

實例:

 代碼如下 復制代碼

<?php
function __aotoload ($class_name) {
 include($class_name.".php"); //寫在類外部。
}

$p = new class_name(); //這裡實例化的類名就被上面的函數變量 $class_name 替代了,非常方便。
?>

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