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

php面向對象全攻略 (十一)__toString()用法 克隆對象 __call處理調用錯誤

16.__toString()方法
我們前面說過在類里面聲明“― ”開始的方法名的方法(php 給我們提供的),都是在
某一時刻不同情況下自動調用執行的方法,“__toString()”方法也是一樣自動被調用的,是在
直接輸出對象引用時自動調用的, 前面我們講過對象引用是一個指針,比如說:“$p=new
Person()”中,$p 就是一個引用,我們不能使用echo 直接輸出$p,這樣會輸出“Catchable fatal
error: Object of class Person could not be converted to string”這樣的錯誤,如果你在類里面定義
了“__toString()”方法,在直接輸出對象引用的時候,就不會產生錯誤,而是自動調用了
“__toString()”方法,輸出“__toString()”方法中返回的字符,所以“__toString()”方法一定
要有個返回值(return 語句)。
代碼片段
復制代碼 代碼如下:
<?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.克隆對象
有的時候我們需要在一個項目里面,使用兩個或多個一樣的對象,如果你使用“new”
關鍵字重新創建對象的話,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯,所以要
根據一個對象完全克隆出一個一模一樣的對象,是非常有必要的,而且克隆以后,兩個對象
互不干擾。
php5 中我們使用“clone”這個關鍵字克隆對象;
代碼片段
復制代碼 代碼如下:
<?
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個構造方法參數為屬性姓名$name、性別$sex和年齡$age進行賦值
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()”方法,是在對象克隆時自動調用的方法,
用“__clone()”方法將建立一個與原對象擁有相同屬性和方法的對象,如果想在克隆后改變
原對象的內容,需要在__clone()中重寫原本的屬性和方法,“__clone()”方法可以沒有參數,
它自動包含$this 和$that 兩個指針,$this 指向復本,而$that 指向原本;
代碼片段
復制代碼 代碼如下:
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個構造方法參數為屬性姓名$name、性別$sex和年齡$age進行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個人可以說話的方法, 說出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//對象克隆時自動調用的方法, 如果想在克隆后改變原對象的內容,需要在__clone()中重寫原本
的屬性和方法
function __clone(){
//$this指的復本p2, 而$that是指向原本p1,這樣就在本方法里,改變了復本的屬性。
$this->name="我是假的$that->name";
$this->age=30;
}
}
$p1=new Person("張三", "男", 20);
$p2=clone $p1;
$p1->say();
$p2->say();
?>

上例輸出:
執行結果
我的名子叫:張三性別:男我的年齡是:20
我的名子叫:我是假的張三性別:男我的年齡是:30
18.__call 處理調用錯誤
在程序開發中,如果在使用對象調用對象內部方法時候,調用的這個方法不存在那么程
序就會出錯,然后程序退出不能繼續執行。那么可不可以在程序調用對象內部不存在的方法
時,提示我們調用的方法及使用的參數不存在,但程序還可以繼續執行,這個時候我們就要
使用在調用不存在的方法時自動調用的方法“__call()”。
代碼片段
復制代碼 代碼如下:
<?php
//這是一個測試的類,里面沒有屬性和方法
class Test{
}
//產生一個Test類的對象
$test=new Test();
//調用對象里不存在的方法
$test->demo("one", "two", "three");
//程序不會執行到這里
echo "this is a test<br>";
?>

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

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

php技術php面向對象全攻略 (十一)__toString()用法 克隆對象 __call處理調用錯誤,轉載需保留來源!

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

主站蜘蛛池模板: 黄色三级三级三级免费看 | 精品一区二区三区免费观看 | 亚洲精品中文字幕无码A片蜜桃 | 国产色精品久久人妻无码看片 | 在线观看国产人视频免费中国 | 国产精品人妻无码99999 | 日本午夜精品理论片A级APP发布 | 无码AV精品一区二区三区 | 亚洲国产五月综合网 | 久久久久久久尹人综合网亚洲 | 曼谷av女郎 | 亚洲欧美自拍明星换脸 | 亚洲精品另类有吗中文字幕 | 99热在线精品视频 | 国产睡熟迷奷系列精品 | 国产露脸无码A区久久蘑菇 国产露脸无码A区久久 | 中国女人内谢69XXXXXA片 | AAA级精品无码久久久国片 | 久久精品久精品99热 | 中文中幕无码亚洲在线 | 欧美日韩永久久一区二区三区 | 啊好深啊别拔就射在里面 | 日本最新免费区中文 | 91看片淫黄大片.在线天堂 | 男人的天堂MV在线视频免费观看 | 午夜毛片在线观看 | a视频在线免费观看 | 免费xxx成年大片 | 中字幕视频在线永久在线 | 久久久久久免费高清电影 | 亚欧洲乱码视频一二三区 | 51国产偷自视频在线视频播放 | 国产精品成人无码免费视频 | 久久亚洲国产精品亚洲 | 秘密教学26我们在做一次吧免费 | 亚洲AV永久无码精品老司机蜜桃 | 国产免费午夜高清 | 一二三四电影完整版免费观看 | 国产精品夜夜春夜夜爽久久小 | 无码日韩人妻精品久久蜜桃免费 | 特级aa 毛片免费观看 |