2016-06-29 4 views
2
배열에서 지역 변수를 생성하기위한 추출 기능이있다

:추출물()

extract(['a' => 10, 'b' => 20]) // $a = 10, $b = 20 

얼마나 깨끗하게 extract() 기능 등의 솔루션,하지만 반원 것입니까? 분명히 다음 행을 따라 뭔가를 할 수 있습니다.

class User { 
    private $user_id; 
    private $password; 
    private $email; 

    public function __construct($params) { 
    $this->user_id = isset($params['user_id']) ? $params['user_id'] : null; 
    $this->password = isset($params['password']) ? $params['password'] : null; 
    $this->email = isset($params['email']) ? $params['email'] : null; 
    } 
} 

더 깨끗한 방법이 있습니까?

답변

5

작동 간단한 해결책은 extract() 같은 :

public function __construct($user_id, $password, $email) 
{ 
    // Add validation and default values for each member as needed 
    $this->user_id = $user_id; 
    $this->password = $password; 
    $this->email = $email; 
} 

이 방법을 다른 :

foreach($params as $key => $val) { 
    $this->$key = $val; 
} 
1

그것을 할 수있는 가장 깨끗한 방법은 생성자 개별 인수를 모두 배열과 extract()를 방지하고 전달하는 것입니다 프로그래머 코드를 읽으면 한눈에 생성자가 예상하는 인수와 그 의미를 이해할 수 있습니다.

또한 클래스를 사용하는 코드를 더 명확하게 만듭니다. 비교 :

$user = new User($id, $_POST['password'], $_POST['email']); 

로 :

$user = new User($_POST); 

을 첫 번째 경우 당신은 실패하거나 예기치 않은 결과를 이유를 이해하기 위해 클래스 User의 코드를 읽을 필요가 없습니다. 의 내용을 살짝 들여다 보면 User::__construct()에 전달 된 값이 예상 한 값인지 알 수 있습니다.


1 "다른 프로그래머는"(그리고 대부분의 시간이됩니다) 몇 개월 후, 당신이 될 수 있습니다.