狂傲 發問時間: 電腦與網際網路程式設計 · 1 0 年前

關於PHP,CLASS的用法

小弟最近在研究程式導向,所以研究CLASS的用法,但網路上的教學實在是不知所以然的很。所以請給我CLASS的詳細用法,當然是越詳細越好,也當然不能貼網路上的文章。

已更新項目:

SORRY,我心中的確是想著物件導向的,不過卻無心打成了程式導向。

然後關於我說的詳細用法,我想你誤解我的意思了。因為我現在是連怎麼做出~一個最簡單的CLASS都沒辦法,因為寫法有誤,但是網路上的文章真的都講的很籠統,所以我才會說要詳細用法。只是用法而已。基本用法。

2 個已更新項目:

再請問一下,在class之外的變數,只能在呼叫時導入嗎?不能在使用class的時候導入之前呼叫時沒有導入的變數嗎?

然後,class裡面宣告的變數,要如何在外面使用…= =|||

3 個已更新項目:

最後一個問題,在宣告function時所設定的屬性,預設值都要放在右邊。例如說:

$a,$b,$c=2,$d=4

那我呼叫時,假設我$c要用預設值,$d卻要用新的數值,那麼$c該輸入什麼?

又假設我現在設定了非常多的屬性,例如說從$a到$z好了。裡面大部分都是有預設值的。那麼我能不能在呼叫時直接打屬性的名稱來給他值?

4 個已更新項目:

最後一個問題,真的沒辦法做到嗎!?

2 個解答

評分
  • Sam
    Lv 6
    1 0 年前
    最佳解答

    關於class的「完整」用法你少說要看個20本書以上。

    這你要叫別人怎麼幫你「詳細」?

    何況那是叫「物件」導向。

    而不是程式導向。

    2010-09-13 22:21:21 補充:

    我只能告訴你關於class的很多方法中的「一部份」。

    「類別」、「繼承」、「多型」、「介面」、「多重繼承」、「委派」、「狀態機」、「抽象層」、「工廠模式」、「資料類別」、「複載」......

    別把class看成和你學php的基本語法一樣簡單的東西。

    雖然他可以讓你寫程式變得更加美好。

    卻也不是三言兩語就能說完的東西。

    否則,也不會一堆死不寫物件導向的人在那鬼吼鬼叫說幹嘛要寫物件?

    2010-09-14 07:32:49 補充:

    ok!因為你一開始說要class「詳細」用法。那就真的很難詳細了。

    不過若是要問class怎麼使用他。這倒是簡單多了。

    1.物件的規劃:

    class demo{

    }

    當你使用class,後面接一個名稱,再用{和}來介定一個class的範圍時。

    這個class就是被定義成一個物件。

    當然從這裡來看,這個物件是一個什麼東西都沒有的物件就是了。

    這裡是以demo為名稱做為範例。

    2.物件的實作:

    當你定義好一個class,不代表這個class就能使用,在你使用這個class前,

    你必須去實作他,而實作的指令叫做new,用法如下:

    $demo = new demo;

    此時$demo就變成你所定義的demo物件。

    3.物件的方法:

    當你定義好一個class,你必須提供方法,否則這個物件等於沒有提供任何

    的功能。

    class demo{

    function show_word(){

    echo 'hello world';

    }

    }

    這邊定義了一個方法叫做show_world,他的功能就是顯示一個hello world的字串。

    實作使用如下:

    $demo = new demo;

    $demo->show_word();

    如此就會顯示出hello world的文字。

    4.物件的屬性:

    PHP有所謂的全域變數和區域變數。每一個方法(函式)內的變數都是獨立而和

    主程式或其他的函式是完全不相干的。

    但是在物件中,不同提供的方法內的變數,彼此仍然也是不相干的。

    但是物件中有提供一種叫做屬性的做法。

    一般書中大致會講到物件的可能的顏色、形狀、大小....稱之為屬性。

    但是事實上屬性最主要除了是定義物件的某種形態定義,也可以將他視為就是物件的區域變數。

    一般的變數是$name這樣子的定義使用。

    屬性則是$this->name這樣子的使用。

    其中$this指的就是物件本體。

    name則是物件屬性

    class demo{

    function show_word(){

    $word = 'hello world';

    }

    function output(){

    echo $word;

    }

    }

    上面這個例子中,提供了二個方法,show_world和output

    $demo = new demo;

    $demo->show_word();

    $demo->output();

    如果你像上面這樣實作他並使用方法。

    你會得到一個完全空白的結果。

    因為$word是變數,他只能存在於show_word方法內,在output中$word等於是沒定義的變數。

    但若你改成

    class demo{

    public $word;

    function show_word(){

    $this->word = 'hello world';

    }

    function output(){

    echo $this->word;

    }

    }

    再實作這個物件並執行時

    就會印出hello world

    請注意物件中的public $word;

    這邊是宣告word屬性,而非$word變數

    你宣告$word之後,屬性的使用仍然是$this->word而非$word

    public是宣告word屬性為一個開放成員屬性

    如果是private則為私有成員屬性

    以上是物件的基本建立及使用方法。

    若想要更詳細了解物件,你可以點我的知識檔案。

    2010-09-15 07:09:18 補充:

    1.若是要將物件之外的變數在使用物件時傳入,這和使用function的參數是一樣的。

    class demo{

    function show_word($word){

    echo $word;

    }

    }

    $demo = new demo;

    $demo->show_word('hello world');

    2010-09-15 07:12:06 補充:

    2.再次強調你講的class變數應稱之為「屬性」

    而你講的是下面的情形

    class demo{

    public $word;

    function output(){

    echo $this->word;

    }

    }

    $demo = new demo;

    $demo->word = 'hello world';

    $this->output();

    2010-09-15 07:15:56 補充:

    如果你指的是要將物件產生的結果屬性回傳(單一屬性或資料結果變數也可以回傳)

    class demo{

    public $word;

    function return_word(){

    $this->word = 'hello world';

    return $this->word;

    }

    }

    $demo = new demo;

    $word = $demo->return_word();

    echo $word;

    2010-09-15 07:19:31 補充:

    上述這些補充如果你練習都清楚了。

    才有辦法理解何謂建構式。

    很抱歉的,奇摩知識家系統的補充似乎超過一定的字數就不准再補充(什麼鬼設計?)所以接下來的補充都會用意見。

    2010-09-15 14:57:57 補充:

    基本上,會經常性預設的往右邊放。

    不會經常性預設或是必須自行傳入的則往左邊放。

    像你的問題$d要給值,那麼$c就必須給值,除非他們二個位置相反。

    屬性的預設值歸預設值。

    你在執行物件後如果改掉屬性就會是新的屬性值。

    2010-09-16 00:48:55 補充:

    特別就您的問題我也查閱相關的資料。

    似乎目前是沒有辦法。

    而且事實上在我目前實做專案至今。

    也沒有因為這個問題造成影響。

    這並不構成程式寫作上的難題,請放心。

    參考資料: 本身是php程式設計師
還有問題?馬上發問,尋求解答。