2011-11-30 41 views
1

我是OOP的新手,所以這可能是一個非常天真的問題;但每當我嘗試使用$this->var語法將類局部變量傳遞到該類中的函數時,它會在我的IDE(NetBeans)中標記語法錯誤。將本地屬性/變量傳遞給該類中的函數/方法?

我試過把它套在括號裏({$this->var}$this->{var}),但都沒有效果。

這裏是我的代碼:

class password_class { 
    public $stretch = 1; 
    public $salt = 'DEFINE_SALT'; 
    public $algo = 'sha256'; 

    function create_salt() { 
     $this->salt = md5(rand()).uniqid(); 
    } 

    function hash_pass($pass, $this->algo, $this->salt, $this->stretch) { 

    } 
} 

我真的不打算使用這個密碼安全措施;它更多的是測試類變量/函數的使用(這將是我第一次創建和調用我自己的類)。

任何幫助將不勝感激!

+0

你不需要'$這個 - > algo,$ this-> salt,$ this-> stretch',你可以在*函數中使用它們。 –

+0

您不需要將本地變量傳遞給本地方法,您可以在方法中使用它們。 – favoretti

回答

3

在OOP中,如果使用實例屬性,則不需要將它們作爲參數傳遞。逸岸,如果你想使用$this->algo等等,你可以簡單地做:

function hash_pass($pass) { 
    // example statement 
    $var = hash($this->algo, $this->salt . $pass); 
} 

此外,如果你需要的PARAMS你可以這樣做:

function hash_pass($pass, $algo = null, $salt = null, $stretch = null) { 
    if ($salt === null) 
     $salt = $this->salt; 

    // other if like this 
    // example statement 
    $var = hash($algo, $salt . $pass); 
} 
+0

啊,我覺得這是我的天真。輝煌的回答,真正澄清了事情。我會接受定時器下降的時候! – Avicinnian

+0

@Avicinnian很高興爲您服務。 –

2

您不能將默認方法/函數參數設置爲對象的字段。你將不得不重寫一遍,如:

function hash_pass($pass, $algo = null, $salt = null, $stretch = null) { 
    $alog = $algo == null ? $this->algo : $algo; 
    $salt = $salt == null ? $this->salt : $salt; 
    $stretch = $stretch == null ? $this->stretch : $stretch; 
} 

由於@Aurelio De Rosa pointed out,你不必實例變量傳遞給方法;他們已經在你身邊了。

+0

+1 - 我們寫相同的答案。 –