欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php面向?qū)ο笕ヂ?(十一)__toString()用法 克隆對(duì)象 __call處理調(diào)用錯(cuò)誤

 更新時(shí)間:2009年09月30日 22:35:07   作者:  
我們前面說(shuō)過(guò)在類里面聲明“— ”開(kāi)始的方法名的方法(PHP 給我們提供的),都是在某一時(shí)刻不同情況下自動(dòng)調(diào)用執(zhí)行的方法
16.__toString()方法
我們前面說(shuō)過(guò)在類里面聲明“— ”開(kāi)始的方法名的方法(PHP 給我們提供的),都是在
某一時(shí)刻不同情況下自動(dòng)調(diào)用執(zhí)行的方法,“__toString()”方法也是一樣自動(dòng)被調(diào)用的,是在
直接輸出對(duì)象引用時(shí)自動(dòng)調(diào)用的, 前面我們講過(guò)對(duì)象引用是一個(gè)指針,比如說(shuō):“$p=new
Person()”中,$p 就是一個(gè)引用,我們不能使用echo 直接輸出$p,這樣會(huì)輸出“Catchable fatal
error: Object of class Person could not be converted to string”這樣的錯(cuò)誤,如果你在類里面定義
了“__toString()”方法,在直接輸出對(duì)象引用的時(shí)候,就不會(huì)產(chǎn)生錯(cuò)誤,而是自動(dòng)調(diào)用了
“__toString()”方法,輸出“__toString()”方法中返回的字符,所以“__toString()”方法一定
要有個(gè)返回值(return 語(yǔ)句)。
代碼片段
復(fù)制代碼 代碼如下:

<?php
// Declare a simple class
class TestClass{
public $foo;
public function __construct($foo) {
$this->foo = $foo;
}
//定義一個(gè)__toString方法,返加一個(gè)成員屬性$foo
public function __toString() {
return $this->foo;
}
}
$class = new TestClass('Hello');
//直接輸出對(duì)象
echo $class;
?>

上例輸出:Hello
17.克隆對(duì)象
有的時(shí)候我們需要在一個(gè)項(xiàng)目里面,使用兩個(gè)或多個(gè)一樣的對(duì)象,如果你使用“new”
關(guān)鍵字重新創(chuàng)建對(duì)象的話,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯(cuò),所以要
根據(jù)一個(gè)對(duì)象完全克隆出一個(gè)一模一樣的對(duì)象,是非常有必要的,而且克隆以后,兩個(gè)對(duì)象
互不干擾。
在PHP5 中我們使用“clone”這個(gè)關(guān)鍵字克隆對(duì)象;
代碼片段
復(fù)制代碼 代碼如下:

<?
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個(gè)構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個(gè)人可以說(shuō)話的方法, 說(shuō)出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
}
$p1=new Person("張三", "男", 20);
//使用“clone”克隆新對(duì)象p2,和p1對(duì)象具有相同的屬性和方法。
$p2=clone $p1;
$p2->say();
?>

PHP5 定義了一個(gè)特殊的方法名“__clone()”方法,是在對(duì)象克隆時(shí)自動(dòng)調(diào)用的方法,
用“__clone()”方法將建立一個(gè)與原對(duì)象擁有相同屬性和方法的對(duì)象,如果想在克隆后改變
原對(duì)象的內(nèi)容,需要在__clone()中重寫原本的屬性和方法,“__clone()”方法可以沒(méi)有參數(shù),
它自動(dòng)包含$this 和$that 兩個(gè)指針,$this 指向復(fù)本,而$that 指向原本;
代碼片段
復(fù)制代碼 代碼如下:

class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個(gè)構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個(gè)人可以說(shuō)話的方法, 說(shuō)出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//對(duì)象克隆時(shí)自動(dòng)調(diào)用的方法, 如果想在克隆后改變?cè)瓕?duì)象的內(nèi)容,需要在__clone()中重寫原本
的屬性和方法
function __clone(){
//$this指的復(fù)本p2, 而$that是指向原本p1,這樣就在本方法里,改變了復(fù)本的屬性。
$this->name="我是假的$that->name";
$this->age=30;
}
}
$p1=new Person("張三", "男", 20);
$p2=clone $p1;
$p1->say();
$p2->say();
?>

上例輸出:
執(zhí)行結(jié)果
我的名子叫:張三性別:男我的年齡是:20
我的名子叫:我是假的張三性別:男我的年齡是:30
18.__call 處理調(diào)用錯(cuò)誤
在程序開(kāi)發(fā)中,如果在使用對(duì)象調(diào)用對(duì)象內(nèi)部方法時(shí)候,調(diào)用的這個(gè)方法不存在那么程
序就會(huì)出錯(cuò),然后程序退出不能繼續(xù)執(zhí)行。那么可不可以在程序調(diào)用對(duì)象內(nèi)部不存在的方法
時(shí),提示我們調(diào)用的方法及使用的參數(shù)不存在,但程序還可以繼續(xù)執(zhí)行,這個(gè)時(shí)候我們就要
使用在調(diào)用不存在的方法時(shí)自動(dòng)調(diào)用的方法“__call()”。
代碼片段
復(fù)制代碼 代碼如下:

<?php
//這是一個(gè)測(cè)試的類,里面沒(méi)有屬性和方法
class Test{
}
//產(chǎn)生一個(gè)Test類的對(duì)象
$test=new Test();
//調(diào)用對(duì)象里不存在的方法
$test->demo("one", "two", "three");
//程序不會(huì)執(zhí)行到這里
echo "this is a test<br>";
?>

上例出現(xiàn)如下錯(cuò)誤,程序通出不能繼續(xù)執(zhí)行;
Fatal error: Call to undefined method Test::demo()
下面我們加上“__call()”方法,這個(gè)方法有2 個(gè)參數(shù),第一個(gè)參數(shù)為調(diào)用不存在的方法
過(guò)程中,自動(dòng)調(diào)用__call()方法時(shí),把這個(gè)不存在的方法的方法名傳給第一個(gè)參數(shù),第二個(gè)參
數(shù)則是把這個(gè)方法的多個(gè)參數(shù)以數(shù)組的形式傳進(jìn)來(lái)。
代碼片段
復(fù)制代碼 代碼如下:

<?php
//這是一個(gè)測(cè)試的類,里面沒(méi)有屬性和方法
class Test{
//調(diào)用不存的方法時(shí)自動(dòng)調(diào)用的方法,第一個(gè)參數(shù)為方法名,第二個(gè)參數(shù)是數(shù)組參數(shù)
function __call($function_name, $args){
print "你所調(diào)用的函數(shù):$function_name(參數(shù):";
print_r($args);
print ")不存在!<br>\n";
}
}
//產(chǎn)生一個(gè)Test類的對(duì)象
$test=new Test();
//調(diào)用對(duì)象里不存在的方法
$test->demo("one", "two", "three");
//程序不會(huì)退出可以執(zhí)行到這里
echo "this is a test<br>";
?>

上例輸出結(jié)果為:
執(zhí)行結(jié)果
你所調(diào)用的函數(shù): demo(參數(shù):Array ( [0] => one [1] => two [2] => three ) )不存在!
this is a test.

相關(guān)文章

  • 提問(wèn)的智慧

    提問(wèn)的智慧

    提問(wèn)的智慧...
    2006-10-10
  • PHP中MD5函數(shù)使用實(shí)例代碼

    PHP中MD5函數(shù)使用實(shí)例代碼

    PHP中有著豐富的函數(shù),MD5加密函數(shù)就是其中之一。
    2008-06-06
  • php連接數(shù)據(jù)庫(kù)代碼應(yīng)用分析

    php連接數(shù)據(jù)庫(kù)代碼應(yīng)用分析

    php下比較常用的就是數(shù)據(jù)庫(kù)的操作,這里是php下比較常用的代碼與函數(shù)。
    2011-05-05
  • 圖書管理程序(三)

    圖書管理程序(三)

    圖書管理程序(三)...
    2006-10-10
  • 最新評(píng)論