php物件導向教程4

來源:互聯網
上載者:User
7.特殊的引用“$this”的使用
現在我們知道了如何訪問對象中的成員,是通過“對象->成員”的方式訪問的,這是在對象的外
部去訪問對象中成員的形式,那麼如果我想在對象的內部,讓對象裡的方法訪問本對象的屬性,或
是對象中的方法去調用本對象的其它方法這時我們怎麼辦?因為對象裡面的所有的成員都要用對
象來調用,包括對象的內部成員之間的調用,所以在PHP 裡面給我提供了一個本對象的引用$this,
每個對象裡面都有一個對象的引用$this 來代表這個對象,完成對象內部成員的調用, this 的本意就是
“這個”的意思,上面的執行個體裡面,我們執行個體化三個執行個體對象$P1、$P2、$P3,這三個對象裡面各
自存在一個$this 分別代表對象$p1、$p2、$p3 。
通過我們可以看到,$this 就是對象內部代表這個對象的引用,在對象內部和調用本對象的
成員和對象外部調用對象的成員所使用的方式是一樣的。

$this->屬性$this->name; $this->age; $this->sex;$this->方法$this->say(); $this->run();

修改一下上面的執行個體,讓每個人都說出自己的名字,性別和年齡:

<?phpclass Person{//下面是人的成員屬性var $name; //人的名字var $sex; //人的性別var $age; //人的年齡//下面是人的成員方法function say() //這個人可以說話的方法{echo "我的名字叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";}function run() //這個人可以走路的方法{echo "這個人在走路";}}$p1=new Person(); //建立執行個體對象$p1$p2=new Person(); //建立執行個體對象$p2$p3=new Person(); //建立執行個體對象$p3//下面三行是給$p1對象屬性賦值$p1->name="張三";$p1->sex="男";$p1->age=20;//下面訪問$p1對象中的說話方法$p1->say();//下面三行是給$p2對象屬性賦值$p2->name="李四";$p2->sex="女";$p2->age=30;//下面訪問$p2對象中的說話方法$p2->say();//下面三行是給$p3對象屬性賦值$p3->name="王五";$p3->sex="男";$p3->age=40;//下面訪問$p3對象中的說話方法$p3->say();?>

輸出結果為:

我的名字叫:張三性別:男我的年齡是:20我的名字叫:李四性別:女我的年齡是:30我的名字叫:王五性別:男我的年齡是:40

分析一下這個方法:

function say() //這個人可以說話的方法{echo "我的名字叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";}

在$p1、$p2 和$p3 這三個對象中都有say()這個方法,$this 分別代表這三個對象, 調用相應
的屬性,列印出屬性的值,這就是在對象內部訪問對象屬性的方式, 如果相在say()這個方法裡調
用run()這個方法也是可以的,在say()這個方法中使用$this->run()的方式來完成調用。
8.構造方法與析構方法
大多數類都有一種稱為建構函式的特殊方法。當建立一個對象時,它將自動調用建構函式,也
就是使用new 這個關鍵字來執行個體化對象的時候自動調用構造方法。
建構函式的聲明與其它操作的聲明一樣,只是其名稱必須是__construct( )。這是PHP5 中的變化,
以前的版本中,建構函式的名稱必須與類名相同,這種在PHP5 中仍然可以用,但現在以經很少有
人用了,這樣做的好處是可以使建構函式獨立於類名,當類名發生改變時不需要改相應的建構函式
名稱了。為了向下相容,如果一個類中沒有名為__construct( )的方法,PHP 將搜尋一個php4 中的寫
法,與類名相同名的構造方法。
格式:

function __construct ( [參數] ) { ... ... }

在一個類中只能聲明一個構造方法,而是只有在每次建立對象的時候都會去調用一次構造方法,
不能主動的調用這個方法,所以通常用它執行一些有用的初始化任務。比如對成屬性在建立對象的
時候賦初值。

<?//建立一個人類class Person{//下面是人的成員屬性var $name; //人的名字var $sex; //人的性別var $age; //人的年齡//定義一個構造方法參數為姓名$name、性別$sex和年齡$agefunction __construct($name, $sex, $age){//通過構造方法傳進來的$name給成員屬性$this->name賦初使值$this->name=$name;//通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值$this->sex=$sex;//通過構造方法傳進來的$age給成員屬性$this->age賦初使值$this->age=$age;}//這個人的說話方法function say(){echo "我的名字叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";}}//通過構造方法建立3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡$p1=new Person(“張三”,”男”, 20);$p2=new Person(“李四”,”女”, 30);$p3=new Person(“王五”,”男”, 40);//下面訪問$p1對象中的說話方法$p1->say();//下面訪問$p2對象中的說話方法$p2->say();//下面訪問$p3對象中的說話方法$p3->say();?>

輸出結果為:

我的名字叫:張三性別:男我的年齡是:20我的名字叫:李四性別:女我的年齡是:30我的名字叫:王五性別:男我的年齡是:40


解構函式:
與建構函式相對的就是解構函式。解構函式是PHP5 新添加的內容,在PHP4 中沒有解構函式。
解構函式允許在銷毀一個類之前執行的一些操作或完成一些功能,比如說關閉檔案,釋放結果集等,
解構函式會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行,也就是對象在記憶體中
被銷毀前調用解構函式。與建構函式的名稱類似,一個類的解構函式名稱必須是__destruct( )。析構
函數不能帶有任何參數。
格式:

function __destruct ( ) { ... ... }
<?//建立一個人類class Person{//下面是人的成員屬性var $name; //人的名字var $sex; //人的性別var $age; //人的年齡//定義一個構造方法參數為姓名$name、性別$sex和年齡$agefunction __construct($name, $sex, $age){//通過構造方法傳進來的$name給成員屬性$this->name賦初使值$this->name=$name;//通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值$this->sex=$sex;//通過構造方法傳進來的$age給成員屬性$this->age賦初使值$this->age=$age;}//這個人的說話方法function say(){echo "我的名字叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";}//這是一個解構函式,在對象銷毀前調用function __destruct(){echo “再見”.$this->name.”<br>”;}//通過構造方法建立3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡$p1=new Person(“張三”,”男”, 20);$p2=new Person(“李四”,”女”, 30);$p3=new Person(“王五”,”男”, 40);//下面訪問$p1對象中的說話方法$p1->say();//下面訪問$p2對象中的說話方法$p2->say();//下面訪問$p3對象中的說話方法$p3->say();?>

輸出結果為:

我的名字叫:張三性別:男我的年齡是:20我的名字叫:李四性別:女我的年齡是:30我的名字叫:王五性別:男我的年齡是:40再見張三再見李四再見王五

以上就是php物件導向教程4的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.