2010-07-15 5 views
3

가정하자, 나는 이것을 달성 할 수있는 방법은클래스 속성에 값을 할당 할 때 속성 이름 대신 상수를 사용할 수 있습니까?

$obj->property="value"; 

있는가,

define('property', 'test'); 

class myClass 
{ 
public $test; 
} 

$obj=new myClass; 

내가 같이 사용할 수, 클래스가?

+1

참으로 사용할 수 있습니다

MyClass { public function __set($key,$value) { $this->{$key} = $value; } } 

'variable'은 어느 쪽이든 다른 쪽을 할뿐입니다. 그리고 상수 키를 모두 대문자로 만드십시오. – RobertPitt

+0

'$ obj -> $ variable'을 사용했지만'$ obj -> {constant}'를 사용하면 정말 이상 할 것입니다. – NikiC

+0

@nikic 실제로이 사용은 덜 공격적이라고 생각합니다. '$ variable'가 단지 몇 가지 값을 취할 수 있다고 확신 할 때 제어 된 환경을 제외하고 임의의 속성을 거의 바꾸고 싶지는 않습니다. 내 대답은 로버트에게의 나의 대답을 보라. – Artefacto

답변

3

예 :

$obj->{property}="value"; 
+0

그게 내가 생각하기에 작동합니다 :/왜 왜 그런 식으로 왜 상수를 원했을까요? 그리고 그들은 전역 범위를 가지고 있습니다, 그래서 왜 필요하겠습니까? – RobertPitt

+1

대답의 방법을 사랑해. 요점. –

+0

@RobertPitt 몇 가지 사례를 생각해 볼 수 있습니다. '$ name'과'$ nameutf8' 두 가지 속성을 가진 클래스가 있다고 가정하십시오. 채워지는 내용은 UTF-8로 인코딩되었는지 여부에 달려 있습니다. 스크립트가 처리하는 데이터에 따라 상수를 변경할 수 있습니다. 예를 들어 처음에는 UTF-8을 지원하지 않으며 마이그레이션을 더 쉽게 수행 할 수 있습니다. – Artefacto

0

예, 당신은 @Artefacto 제안하지만 당신은 속성 값이 변경되지 않습니다 확신 할 때 상수를 사용해야합니다 수!

1

이 작업을 수행하는 가장 좋은 방법은 같은 stdClass를 만드는 것입니다 같은 클래스 : 당신이에`constants`을 설정하려는 이유는 단지

$Storage = new MyClass; 

$Storage->SomeNewVar = "Some New Val"; 

echo $Storage->SomeNewVar; 
+0

이것은 전혀 대답하지 않는다. – Artefacto

+0

참으로 오빠는 그가 무엇을 요구하고 있는지, 그리고 이미 자신이 대답했는지 잘못 이해하고 있습니다. – RobertPitt

관련 문제