2012-06-05 98 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)