請問一下 這兩個的差別在哪 [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



訪客
請問一下 這兩個的差別在哪
Anon:訪客
[code]
<?php

//1

class test
{
public static function run()
{
print "Works\n";
}
}

//2

function run()
{
print "Works\n";
}

?>
[code]
請問一下 1號 根 2 號差在哪邊阿?
1號的公用是什麼阿?
http://php.net/manual/en/language.oop5.php
我看的頭昏眼花的...

2011/6/13 19:35 | 129e3 b6fba 332db 442a5
應用擴展 工具箱
訪客
回覆: 請問一下 這兩個的差別在哪
Anon:訪客
第1種: 是「物件導向」的寫法,那是一個 class 類別,需要 PHP5 以上才支援。

第2種: 是一般函式的寫法,是一個 function。PHP4 就可以執行。

「物件導向」會讓開發大型程式更簡易,class 可以"繼承",function 不行。但物件導向觀念比較複雜,學習較不易。

實際上樓主這兩段例子,都無法直接執行,還需要去實體化物件,和呼叫函數,才能執行。

使用方法:

第一種:實體化物件,要用 new 去實體化

// test 就是 class test
// 實體化 new 它,並且給它一個實體變數
$myRun = new test ;

// class 類別中的 function 叫做「方法」
// 附帶一題:class 類別中的變數,叫做「成員屬性」
// 以下呼叫類別中的方法
$myRun->run() ;

輸出結果:Works


第二種:呼叫函式

// 呼叫函式就是直接打函式名稱
// 小括號裡面是給代變數用的,這範例沒有這種設計
run() ;

輸出結果:Works



表面上看來,物件導向好像多了幾個步驟,還要先實體化,又呼叫方法的。不過這是因為這個範例太簡單。

如果比較複雜的程式,就能體現出物件導向的好處。礙於篇幅,不想講了,請自行買書來看....


------------------------------------------

題外話1:

另外,上例是 class 和 實體化 new 寫在同一個 .php,若不是這樣,而是 class 自己寫一個 .class 檔,那麼還需要 require_once,把 class 導進去 .php 才能用。

這是 PHP5 物件導向比較麻煩的地方,因為 PHP5 的物件導向還不成熟...只是試做階段,而且 PHP5 只是初步支援物件導向,但它本身並無任何內建的官方 class 可用。聽說 PHP6 才會強化帶來真正的物件導向。

一般大量 class 的情況,會乾脆寫個 __autoLoad,就能直接實體化 class 了。

classAutoload.func.php

<?php

// function 自動載入 class

function __autoload ($className) {
require_once ('include/class/' . $className . '.class.php') ;
}

?>

↑ 相對路徑 /include/class/ 可能要修改一下才能用。

如此一來,每個 .php原始碼檔
只要先在前面 require_once classAutoload.func.php
就能用到所有自己寫的 class 了

而這也就是為什麼加速文件會說 class 導致速度比較慢的原因(詳後述)...


------------------------------------------------

題外話2:

有一些 PHP 加速文件指出:採用全物件導向的寫法,會讓 PHP 效能較差,如不是真的非需要物件導向不可,用一般 funtion 可以加速。

但我個人不認同這種加速說法。單純的 funtion 在直譯上雖然比較快,但損失的是開發效率和大型專案的維護性。

包括加速文件列一大堆例子:

比如:echo AAA . BBB
如改寫成 echo AAA , BBB,速度會更快
就是用 echo 的參數 , (逗號)來取代 . (字串連接號)
效果一樣,說這樣可以加速....

或許能加速吧,但也就節省幾 ms 毫秒時間
然而改成這種的,其它人看得懂嗎?
這就損失了程式維護性
所以我個人不認同這種加速想法...這有點像是鑽牛角尖

「物件導向」比較讚啦

若對物件導向有興趣,先去摸摸 JAVA 會有很大幫助,JAVA 是全物件導向的語言,觀念較完整清晰。

2011/6/13 21:06 | b16be d83ac a0ef6 afa60
應用擴展 工具箱
回覆: 請問一下 這兩個的差別在哪
會員五級
註冊日期:
2008/10/7 21:19
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 896
MP : 661 / 39191
EXP: 85
離線
現在最新的是PHP6,好像有更加完善物件導向的特性

2011/6/13 21:25
I′m UGP
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.