簡體   English   中英

為什么有些變量是參數,而有些不是?

[英]Why some variables are parameters and others aren't?

造成這種情況的原因可能是:

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

代替這個:

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

為什么有些是參數,有些則不是?

非常感謝,MEM

函數定義定義了函數本身與調用它的代碼之間的約定。

如果調用者應指定變量的值,則該變量應僅是參數。 否則,如果變量僅在函數內部使用,則無需將其指定為參數。

錯誤是由函數設置的,沒有意義將這些錯誤傳遞給

如果它們是參數,則用戶可以在創建對象的過程中將其傳遞。 像這樣的電話

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

會在內存中已經存在錯誤的情況下初始化您的對象...如果是錯誤編號或字符串,那是不希望的。 用戶不應將隨機錯誤戳入您的對象。

通常,您以僅接受運行所需的參數/數據的方式定義函數。

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

也許您想使用三個以上的參數來調用構造函數,具體取決於構造函數/類的作用。 參數列表不是初始化局部變量的地方。 檢查要讀取參數的類的API(看起來像fsockopen函數的參數,因此請先閱讀本文檔)。

$ 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);

現在,我還可以覆蓋錯誤代碼(假設這是errnum的目的,如果這是某種計數器,則更糟)和錯誤字符串。 您是否真的希望能夠通過函數調用來控制此操作? 可能不是...我想您希望對此進行修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM