2012-06-05 20 views
3

我試過$this->,但是無法爲$first_name and $last_name變量賦值。如果不刪除函數的靜態特性並且不將靜態特性插入變量,我怎樣才能回顯full_name()?這裏是代碼:如何從PHP中的靜態函數中爲公共變量賦值?

<?php 

class User { 

    public $first_name; 
    public $last_name; 

    public function full_name() { 
    if(isset($this->first_name) && isset($this->last_name)) { 
    return $this->first_name . " " . $this->last_name; 
    } else { 
    return "No name!"; 
    } 
    } 

    public static function verify() { 

    $this->first_name = "firstname"; 
    $this->last_name = "last_name"; 
    } 
    } 

$user = new User(); 
User::verify(); 
echo $user->full_name() 

?> 
+7

你不能。靜態方法沒有上下文,所以沒有什麼可以驗證,除非你傳入一些東西。當然有解決方法..就像使你的對象成爲單例。但是在你的用戶示例中這沒有多大意義。 –

回答

4

你不能真的......其他然後使用單例模式,這相當於打破了靜態函數的重點。

其基本思想是一個靜態函數不需要一個實例,但你正在嘗試做什麼。
我建議驗證非靜態setter函數或構造函數中的數據。或者,如果需要,請添加一個公共方法,驗證其不是靜態的。
想一想:靜態不需要實例,那麼如果沒有實例(因此沒有「$this」),那麼您要驗證什麼。

7

你不能。爲什麼不把verify一個成員函數,並調用它喜歡

$user->verify(); 

另一種方法是給用戶傳遞到驗證功能,就像這樣:

public static function verify($user) { 
    $user->first_name = 'firstname'; 
    $user->last_name = 'last_name'; 
} 

,並呼籲像這樣:

User::verify($user)