2013-02-14 5 views
0

전체 객체를 업데이트하지 않고 db의 객체 속성을 동적으로 업데이트하는 함수를 설정하려고합니다.PHP는 eval을 사용하여 객체 속성 값을 얻습니다.

$sql = "UPDATE " . self::$table_name . " SET "; 
$sql .= "$attribute = '" . eval("\$this->$attribute;") . "'"; 
$sql .= " WHERE ..."; 

나는이 평가를 얻을 수가 기운 (\ "의 $이 -> $ 속성;") 객체를 생성하는 속성 값. 속성에 값이 있으며 공용 속성입니다.

감사

$ 속성은 내가 원하는 'address_id'와 같은 문자열을 포함하는 함수 var에있다 업데이트 TABLE_NAME에 SET address_id = '11'USER_ID = '1' 이 그것의 간단한 예입니다 WHERE

+8

왜 '평가'해야합니까? 확실하게'$ this-> attribute'로 충분할 것인가? – BenM

+0

왜 처음에는 eval을 사용해야합니까? 왜 그냥 $ this-> attribute를 사용하지 않는가? –

+0

그리고'eval()'을 사용할 때마다 Prepared statements –

답변

2

eval을 사용하여이를 수행 할 필요가 없습니다. PHP는 변수 변수를 지원합니다

http://php.net/manual/en/language.variables.variable.php 그래서이 수행합니다

$this->$attributes 

주 두 번째 $ 기호. 이것은 기본적으로 $ attributes의 값이 속성 이름으로 사용됨을 의미합니다. 당신은 당신이 브래킷을 사용하여 수행 할 수 있습니다 조금 더 명확 작성하려는 경우

이 배열을 사용하여, 또는 당신이 원하는 경우 변수 이름을 구축하는 여러 변수를 사용하고 싶었다 경우 브래킷이 필요
$this->{$attributes} 

다음과 같이하십시오 :

$this->{$var1}_{$array[0]}_{$var2} 

이것은 아마도이 질문의 범위를 벗어나지 만, 변수 변수가 무엇인지 아는 것이 좋습니다. 하지만 코드를 읽을 수 없게 만들고 이해하기 어렵게 만들기 때문에 사용하지 않는 것이 좋습니다.

1

eval()를 사용할 필요가 없습니다 :

$this->$attribute 

당신에게 $this->attribute가 제대로 소독되어 있는지 위치 : attribute 변수, 사용하는 것입니다

$sql = "UPDATE " . self::$table_name . " SET "; 
$sql .= "$attribute = '" . $this->attribute . "'"; 
$sql .= " WHERE ..."; 

경우?

+1

나는이 같아야한다고 생각한다 ' '. $ this-> attribute. "'' –

+0

가변 변수 인 경우. – BenM

+1

concatination에 첫 번째 점 '.'을 잊어 버렸습니다. – MarcDefiant

관련 문제