2010-07-27 85 views
0

可能是什麼有這樣做的原因:爲什麼有些變量是參數而其他變量不是?

public function __construct($host, $port, $timeout = 5){ 
    $errnum = 0; 
    $errstr = ''; 

取而代之的是:

public function __construct($host, $port, $errnum = 0, $errstr = '', $timeout = 5){ 

爲什麼有些是params而其他不是?

非常感謝, MEM

回答

5

函數定義定義了函數本身和調用它的代碼之間的合同點。

如果調用者應該指定它的值,則變量只應該是一個參數。否則,如果一個變量只被函數內部使用,則不需要將其指定爲參數。

+0

謝謝。我可以請問一個相關的問題: 我經常看到$ errnum和$ errstr 爲什麼不用其他名稱? 非常感謝 :) – MEM 2010-07-27 17:21:22

+0

@MEM這些只是公約。無論你想要什麼,你都可以命名它們,但名稱應該是合理的。這些名稱可能出現在php手冊中的很多示例中。 – 2010-07-27 17:25:28

+0

謝謝。我們有一個約定,或者至少我遵循這個約定,即命名$ variablesLikeSo「lower camel case」(我想我們稱之爲),然後當我經常看到這些變量時,我發現自己陷入了困境。我相信我會改變,我總是會很清楚像$ errorNumber $ errorDescription那樣,我相信它會沒事的。 再次感謝您。 – MEM 2010-07-28 08:46:55

1

如果他們將PARAMS,用戶可以創建對象的過程中通過他們。類似

$ a = new MyObject($ myhost,$ myport,40000,'Failed。',$ mytimeout);

會初始化您的對象,並且其內存中已有錯誤...如果出現錯誤編號或字符串,則這是不需要的。用戶不應該能夠在對象中插入隨機錯誤。

+0

是的。謝謝。:D – MEM 2010-07-28 08:54:35

2

的錯誤由功能設置,並且沒有經過那些在

+0

您能否詳細說明一下? – MEM 2010-07-27 17:17:44

+0

我現在看到了。謝謝。 :) – MEM 2010-07-27 17:19:34

1

通常情況下,您定義一個函數的方式是它只接受參數/數據,它肯定是需要才能運行。

在你的例子中,$errnum$errstr似乎是該函數內部使用的變量。如果你設計了這個功能,你必須決定是否讓用戶有可能覆蓋這些功能。

+0

非常清楚。 :) 謝謝。再次。 :) – MEM 2010-07-28 08:52:47

+0

1個問題,如果你不介意,所以可選參數...是不是要考慮一個方法的參數? – MEM 2010-07-28 08:53:35

+0

@MEM:可以使用它們,但前提是它們有意義。再說一次:如果你不想讓用戶修改某些東西,不要給他機會。 – 2010-07-28 08:58:17

0

也許你想調用超過3個參數的構造函數,具體取決於構造函數/類的用途。參數列表不是初始化局部變量的地方。檢查您正在讀取參數的類的API(看起來像是針對fsockopen函數,因此請先閱讀本文檔)。

+0

;)謝謝。這是對我的一種更基本的無知,一種理解這個階級如何運作的方式。 (這實際上是一個我正在幫助建設的班級,所以,這就是這個問題的原因。 謝謝。:) – MEM 2010-07-28 08:52:23

0

$ timeout是調用該函數時可以覆蓋的默認參數。

$ errnum和$ errstr在調用函數時不能被覆蓋。

觀察:

public function goodConstruct($host, $port, $timeout = 5){ 
    $errnum = 0; 
    $errstr = ''; 
} 

goodConstruct('hostname',8443,60); 

通過這樣做,我可以覆蓋默認的超時。

public function badConstruct($host, $port, $errnum = 0, $errstr = '', $timeout = 5) 
{ 

//code 
} 

badConstruct('hostname',8443,99,'hey look at this silly error!!!!',900); 

現在我也可以覆蓋錯誤代碼(假設這是差錯編號的目的,這是即使是某種計數器更糟)和錯誤字符串。你真的想要從你的函數調用中控制這個嗎?可能不是......我假設你想要修復它。

+0

我明白了。謝謝!這是一個很好的補充。我沒有想過參數與被覆蓋的關係。尼斯。 :) – MEM 2010-07-28 08:49:25

相關問題