2013-05-01 74 views
1

這是我的靜態函數生成一個隨機字符串:

public static function generateCode($salt) 
    { 
     $this->generate = substr(hash('sha512', $salt), 0, 15); 
     return $this->generate; 
    } 

這就是我如何使用它:

  $this->insert->execute(array(
      ":username" => $username, 
      "generated_code" => self::generateCode($email) 
      )); 

我已在申報財產:

protected $generate; 

收到此錯誤:

Fatal error: Using $this when not in object context in C:\xampp\htdocs\drip\class\users.class.php on line 154 

線:

 $this->generate = substr(hash('sha512', $salt), 0, 15); 

這有什麼錯呢?爲什麼它給了我這個錯誤?

+0

'$ this'在靜態函數中不存在。它們只存在於類上下文中,沒有對象實例 – knittl 2013-05-01 19:03:37

回答

7

靜態方法不屬於一個對象的實例,$這涉及到實例...

在這種情況下我不「認爲你需要其他的東西,而不是簡單地返回哈希的結果(候選lambda表達式也許?)

public static function generateCode($salt) 
{ 
    return substr(hash('sha512', $salt), 0, 15); 
} 
+0

哦,我現在看到...非常感謝。 – user2326532 2013-05-01 19:06:54

+0

靜態可以是私人的嗎? – user2326532 2013-05-01 19:07:17

+1

@ user2326532當然,爲什麼不呢? – 2013-05-01 19:07:58

4

A static函數意味着它是綁定到類,而不是每個實例(對象)。像這樣調用它:

ClassName::generateCode($email); 

此外,您不能在靜態函數中使用對象成員。讓你的$generate成員也static,並把它稱爲:

ClassName::$generate 
+0

它在同一個類中,因此我稱它爲self ::,我讀過如果它在同一個類中,則必須使用self ::但是,它沒有解決錯誤。 – user2326532 2013-05-01 19:03:42

+0

即時成員是靜態的,而不是方法。 – 2013-05-01 19:04:51

+1

訪問內部類(靜態)方法時,可以使用'self ::'或'static ::',這是正確的。 – Orbling 2013-05-01 19:07:01

0

裏面的函數,因爲函數聲明爲static,你應該使用的$這種自我。

聲明你的成員$ generate爲靜態,否則不起作用。