iT邦幫忙

24

PHP物件導向的第一課:class

早上剛進公司腦袋還有一點空空,來寫個很久沒寫的教學好了。
這文章基本是讓一些學PHP有一陣子,但對物件導向還是搞不明白。
或是對於書上寫的東西,明明就一個很簡單的概念,但書上硬是寫的很困難。
或是作者的中文程度是實在有很大的問題之類的狀況。
我儘可能用極淺顯易懂的方式來說明。因為這會是整個課題系列。
這是第一篇,最初的入門:class

class demo{

}

好!我課講完了......
總覺得我這樣會被丟蕃茄和雞蛋。
觀眾:你這什麼沒來由的就2個單字加個左右括號?

其實這是一個宣告類別(class)的方法。
就是使用class去宣告demo這個類別。
不過要注意的事情是,這邊僅僅就只是宣告。
基本上如果你們學過函式(function)的話,函式寫好是可以直接呼叫使用的。
但是物件並不是你去宣告他就可以使用,重點是我還沒講他要怎麼使用。

上面講到了,class demo這是宣告demo這個類別。
但是類別要被程式碼所引用的話,你必須先將類別「實體化」成物件才行。
這邊我們來談談所謂的「物件」。
其實所謂的「物件」,以現實來說,你週遭的事物實際看到的,存在的都可以是一種物件。
比如說,我是「sam」,sam是我的名字,他所代表的是我的諸多屬性之一。
何謂屬性?我的名字:sam,我的性別:男,我的年齡:(不要問),我的興趣:打電動。
我是sam,我會跑,會跳,會吃,會玩。這些動作是我的「行為能力」,也可以說是功能(方法)。
一個物件中,基本帶有的就是屬性(property)和方法(function)。

觀眾:你扯那麼久了,還沒解釋你一開始那個程式碼是要怎麼運行啦。

ok!我不是講了,你必須要先實體化類別成物件。
在php(在其他很多語言似乎也類似)中,直接實體化是使用(new)這個指令。

class demo{

}
$demo = new demo;

很高興的,很快樂的,我們生成了一個物件,叫做demo的物件。而將$demo這個變數的型態,轉變成了物件。
不過......
這個物件好像啥事都不能做。就空空的什麼都沒有。

觀眾:(手握雞蛋)

好啦好啦!江湖規矩!hello world來拜訪大家。
不過我先提一下,上面講過,一個物件會有「屬性」跟「方法」。
所以既然我們要印出hello world,基本上就先提供一個方法直接印出hello world好了。

class demo{

    function hello(){
        echo 'Hello World!';
    }

}
$demo = new demo;
$demo->hello();

這邊,我宣告了一個方法叫做hello(),他的目的只有一個,就是印出Hello World!
在物件中宣告方法的指令仍然是function,但要注意這和你一般宣告函式不同。
在物件中的函式「無法」被外部的程式碼直接呼叫,你直接使用的話會變成函式不存在。
(我就一直搞不懂為什麼php不直接像其他的語言宣告成員+名稱就好了。)
今天的這第一堂課就先上到這邊。
下一堂課要教大家什麼是屬性及物件成員。
值日生記得擦黑板,倒垃圾。放學回家要乖乖的路上別亂跑。
過馬路要看紅綠燈,記得扶老太太過馬路。
還有騎車不小心撞到小妹妹要去「秀秀」,不要不爽就踹人家二腳!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
老鷹(eagle)
iT邦高手 1 級 ‧ 2013-01-21 10:44:05

感謝SAM大分享
沙發沙發
謝謝謝謝

0
richardsuma
iT邦大師 1 級 ‧ 2013-01-21 11:17:30

謝謝分享!

0
elf
iT邦新手 2 級 ‧ 2013-01-21 18:49:43

讚謝謝

elf iT邦新手 2 級 ‧ 2013-01-24 11:39:47 檢舉

如果SAM大寫書也這樣寫的話,讀起來應該會很Happy吧!
rockrock

1
drtiger
iT邦研究生 5 級 ‧ 2013-01-23 10:17:32

有人知道為什麼大陸人把「物件」稱為「面向对象」呢?
我沒有什麼意思,只是好奇為什麼這麼翻譯。

fillano iT邦超人 1 級 ‧ 2013-01-23 12:08:50 檢舉

對象:Object
面向:Orient

0
一級屠豬士
iT邦大師 1 級 ‧ 2013-01-23 13:00:15

大陸很多翻譯就是字面直翻,但是有些卻又過度精簡;
習慣就好了,不用去管他字面翻譯是哪個,轉回成英文就好了.

0
a916208768
iT邦新手 5 級 ‧ 2018-05-01 10:39:03

謝謝分享,釐清了一些觀念!!

0
johnqq
iT邦新手 5 級 ‧ 2020-09-28 12:25:57

請問這段後面的new demo是正確的嗎?
我的觀念是new demo(),代表new demo這個cless的建構子

$demo = new demo;

寫程式是這樣:有質疑的時候,何妨執行下去試試看?

我要留言

立即登入留言