天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

16.__toString()方法
我們前面說過在類里面聲明“― ”開始的方法名的方法(php 給我們提供的),都是在
某一時刻不同情況下自動調(diào)用執(zhí)行的方法,“__toString()”方法也是一樣自動被調(diào)用的,是在
直接輸出對象引用時自動調(diào)用的, 前面我們講過對象引用是一個指針,比如說:“$p=new
Person()”中,$p 就是一個引用,我們不能使用echo 直接輸出$p,這樣會輸出“Catchable fatal
error: Object of class Person could not be converted to string”這樣的錯誤,如果你在類里面定義
了“__toString()”方法,在直接輸出對象引用的時候,就不會產(chǎn)生錯誤,而是自動調(diào)用了
“__toString()”方法,輸出“__toString()”方法中返回的字符,所以“__toString()”方法一定
要有個返回值(return 語句)。
代碼片段
復(fù)制代碼 代碼如下:
<?php
// Declare a simple class
class TestClass{
public $foo;
public function __construct($foo) {
$this->foo = $foo;
}
//定義一個__toString方法,返加一個成員屬性$foo
public function __toString() {
return $this->foo;
}
}
$class = new TestClass('Hello');
//直接輸出對象
echo $class;
?>

上例輸出:Hello
17.克隆對象
有的時候我們需要在一個項(xiàng)目里面,使用兩個或多個一樣的對象,如果你使用“new”
關(guān)鍵字重新創(chuàng)建對象的話,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯,所以要
根據(jù)一個對象完全克隆出一個一模一樣的對象,是非常有必要的,而且克隆以后,兩個對象
互不干擾。
php5 中我們使用“clone”這個關(guān)鍵字克隆對象;
代碼片段
復(fù)制代碼 代碼如下:
<?
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個人可以說話的方法, 說出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
}
$p1=new Person("張三", "男", 20);
//使用“clone”克隆新對象p2,和p1對象具有相同的屬性和方法。
$p2=clone $p1;
$p2->say();
?>

php5 定義了一個特殊的方法名“__clone()”方法,是在對象克隆時自動調(diào)用的方法,
用“__clone()”方法將建立一個與原對象擁有相同屬性和方法的對象,如果想在克隆后改變
原對象的內(nèi)容,需要在__clone()中重寫原本的屬性和方法,“__clone()”方法可以沒有參數(shù),
它自動包含$this 和$that 兩個指針,$this 指向復(fù)本,而$that 指向原本;
代碼片段
復(fù)制代碼 代碼如下:
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個人可以說話的方法, 說出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//對象克隆時自動調(diào)用的方法, 如果想在克隆后改變原對象的內(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)用錯誤
在程序開發(fā)中,如果在使用對象調(diào)用對象內(nèi)部方法時候,調(diào)用的這個方法不存在那么程
序就會出錯,然后程序退出不能繼續(xù)執(zhí)行。那么可不可以在程序調(diào)用對象內(nèi)部不存在的方法
時,提示我們調(diào)用的方法及使用的參數(shù)不存在,但程序還可以繼續(xù)執(zhí)行,這個時候我們就要
使用在調(diào)用不存在的方法時自動調(diào)用的方法“__call()”。
代碼片段
復(fù)制代碼 代碼如下:
<?php
//這是一個測試的類,里面沒有屬性和方法
class Test{
}
//產(chǎn)生一個Test類的對象
$test=new Test();
//調(diào)用對象里不存在的方法
$test->demo("one", "two", "three");
//程序不會執(zhí)行到這里
echo "this is a test<br>";
?>

上例出現(xiàn)如下錯誤,程序通出不能繼續(xù)執(zhí)行;
Fatal error: Call to undefined method Test::demo()
下面我們加上“__call()”方法,這個方法有2 個參數(shù),第一個參數(shù)為調(diào)用不存在的方法
過程中,自動調(diào)用__call()方法時,把這個不存在的方法的方法名傳給第一個參數(shù),第二個參
數(shù)則是把這個方法的多個參數(shù)以數(shù)組的形式傳進(jìn)來。
代碼片段
復(fù)制代碼 代碼如下:
<?php
//這是一個測試的類,里面沒有屬性和方法
class Test{
//調(diào)用不存的方法時自動調(diào)用的方法,第一個參數(shù)為方法名,第二個參數(shù)是數(shù)組參數(shù)
function __call($function_name, $args){
print "你所調(diào)用的函數(shù):$function_name(參數(shù):";
print_r($args);
print ")不存在!<br>/n";
}
}
//產(chǎn)生一個Test類的對象
$test=new Test();
//調(diào)用對象里不存在的方法
$test->demo("one", "two", "three");
//程序不會退出可以執(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.

php技術(shù)php面向?qū)ο笕ヂ?(十一)__toString()用法 克隆對象 __call處理調(diào)用錯誤,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 大陆女人内谢69XXXORG | 野花日本完整版在线观看免费高清 | 看电影就来5566先锋av | 向日葵视频app下载18岁以下勿看 | 日韩1区1区产品乱码芒果榴莲 | 女生扒开下面 | 亚洲免费一区 | 国产在线一区二区AV视频 | 金发欧美一区在线观看 | 黑人 尺寸 强行害怕 痛哭 | 视频一区国产 | 亚洲黄色网页 | 日本久久久久久久做爰片日本 | 亚洲性夜夜夜色综合网 | 在线视频 日韩视频二区 | 亚洲综合久久一本伊伊区 | 国产成人在线视频免费观看 | 国产精品无码视频一区二区 | 午夜一个人在线观看完整版 | 野花视频在线观看免费 | 一本大道熟女人妻中文字幕在线 | 亚洲精品无码不卡在线播放he | 亚洲精品美女久久久久99 | 亚洲视频在线免费看 | 亚洲视频网站欧美视频网站 | 色翁荡息又大又硬又粗又爽电影 | 日本艳妓BBW高潮一19 | 吃奶摸下的激烈免费视频 | 啦啦啦 中文 日本 韩国 免费 | 国产精品久AAAAA片 | 女子叉开腿让男子桶免费软件 | 亚洲无AV在线中文字幕 | 男人插女人动态图 | 中国老太60old mantv | 亚洲理论在线a中文字幕 | 久久这里只精品热在线99 | 妈妈的朋友5在线观看免费完整版中文 | 国产浮力草草影院CCYY | 国产精品JK白丝AV网站 | 爱穿丝袜的麻麻3d漫画acg | 国产亚洲欧洲日韩在线观看 |