2012-06-05 2 views
3

을 시도했지만 변수에 $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

수 없습니다. 왜이 같은 검증 기능으로 사용자에게 전달하는

$user->verify(); 

또 다른 대안이 될 것 좋아 verify 멤버 함수를 만들고 호출하지 :

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

및 호출과 같이 :

User::verify($user) 
관련 문제