2014-05-18 5 views
1

연관 배열의 키와 값을 클래스 속성에 할당하려고합니다. 아래 코드가 나와 있습니다. $ user object를 사용하려고하면 오류가 발생합니다. 배열은 실행중인 데이터베이스 쿼리 (PDO)에서 올 수 있습니다.연관 배열에서 속성에 값을 동적으로 할당하는 방법

내가이 작업을 수행 할 수있는 방법이 있습니까?

<?php 

class assoctoprop { 

public $fname; 
public $lname; 
public $email; 

public function assign(){ 
    $user = new assoctoprop; 
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"[email protected]"); 
    foreach($array as $key=>$value){ 
    $user->$key = $value; 
    } 
    return $user; 
} 
} 
echo $user->fname."<br/>"; 
echo $user->lname."<br/>"; 
echo $user->email."<br/>"; 
?> 

<?php 

class assoctoprop { 

public $fname; 
public $lname; 
public $email; 

/*public function assign(){ 
    $user = new assoctoprop; 
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"[email protected]"); 
    foreach($array as $key=>$value){ 
    $user->$key = $value; 
    } 
    return $user; 
}*/ 
} 
      $user = new assoctoprop; 
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"[email protected]"); 
    foreach($array as $key=>$value){ 
    $user->$key = $value; 
    } 
echo $user->fname; 
echo $user->lname; 
echo $user->email; 
?> 

작동하지만이 함께 가지고있는 문제는 내가 원하는 때를 사용 할 수 있도록 반드시 작성하는 방법으로 전체 프로세스를 밀어 싶어한다는 것입니다 모든 시간에 다시 한번 절차를 반복하십시오.

+0

예. assign 메서드 내에서 클래스를 인스턴스화 할 수 있습니까? – hello

+0

PDO를 사용하는 경우 사용자 정의 개체로 결과를 반환 할 수 있습니다. PDOStatement 오브젝트의 setFetchMode() 메소드를 사용하여 오브젝트를 리턴 할 수 있습니다. http://www.snippetbank.net/2014/05/php-introduction-to-pdo-part-2.html –

답변

3

assign()은이 시점에서 수업 외부에 있어야하는 것처럼 보입니다.

내부에서 클래스를 인스턴스화 할 수 있지만이 경우에는 필요하지 않습니다. 그냥 내에서 클래스를 참조 할 $this를 사용 : 또한 클래스의 내부를 정의하는 대신 함수에 그 배열을 전달 고려해야한다

class assoctoprop { 

    public $fname; 
    public $lname; 
    public $email; 

    public function assign(){ 
     $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"[email protected]"); 
     foreach($array as $key=>$value){ 
      $this->$key = $value; 
     } 
    } 

} 

$user = new assoctoprop; 
$user->assign(); 

echo $user->fname."<br/>"; 
echo $user->lname."<br/>"; 
echo $user->email."<br/>"; 

, 당신은 속성이 존재 확인하기 위해 검사를 몇 가지 기본적인 오류를해야 당신은 그것을 설정하기 전에, 등

편집 : 당신은 또한 class's constructorassign() 방법을 만들 수 있으므로 즉시 호출 할 것이다 :

class assoctoprop { 
    public $fname; 
    public $lname; 
    public $email; 

    function __construct($array){ 
     foreach($array as $key=>$value){ 
      $this->$key = $value; 
     } 
    }  
} 

$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"[email protected]"); 
$user = new assoctoprop($array); 

echo $user->fname."<br/>"; 
echo $user->lname."<br/>"; 
echo $user->email."<br/>"; 

편집 2 :here's an interesting post 아직 존재하지 않는 클래스 속성을 사용하는 것에 대해 (이 동적으로 만들고 싶을 경우).

4

질문을 오해하지 않는 한, 배열의 객체 유형을 객체로 설정하면이 동일한 작업을 수행 할 수 있습니다.

$object = (object)array("fname" => "firstname", "lname" => "lastname", "email" => "[email protected]"); 
+0

실제로 작동합니다! – hello

관련 문제