2012-06-05 3 views
3

Я пробовал $this->, но не смог присвоить значение переменной $first_name and $last_name. Не удаляя статическую функцию функции и не вставляя статическую функцию в переменные, как я могу ответить full_name()? Вот код:Как я могу присвоить значение переменной public из статической функции в 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

Вы не можете действительно ... иначе использовать шаблон singleton, который скорее поражает точку статической функции.

Основная идея состоит в том, что статическая функция не требует экземпляра, но то, что вы пытаетесь сделать, делает.
Я бы предложил проверить данные в нестатической функции setter или в конструкторе. Или, если необходимо, добавьте общедоступный метод проверки, который не является статичным.
Подумайте: статика не нуждается в экземпляре, так что вы проверяете, если нет экземпляра (и, следовательно, нет «$this»).

7

Вы не можете. Почему бы не сделать verify функцию-член и называют это нравится

$user->verify(); 

Другой альтернативой было бы передать пользователю в функции проверки, как это:

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

и называют так:

User::verify($user)