2010-01-07 5 views
2

stdClass 객체를 일반적인 색인화 된 배열처럼 사용할 수 있습니까?배열처럼 stdClass를 사용할 수 있습니까?

즉 $ 배열 = 배열 ​​ ( [0] => 120 [1] => 382 [2] => 552 [3] => 595 [4] => 616 )

$a = array(); 
$array[] = 120; 
$array[] = 382; 

과 같이 구성 될 수 있지만, 내가 객체와 그렇게하면 그냥 덮어 의 자체 : 나는 '는'모든 시간을 변경할 수 있습니다 알고

$obj = new stdClass; 
$obj->a = 120; 
$obj->a = 382; 

,

이 바보 같은 질문 경우 죄송하지만 어떤 이유로 날 유세입니다! 당신은 항상 당신의 재산의 이름을 가지고 있기 때문에

은, 아니, 즉 어떤 도움 :)

+3

필드를 오브젝트 위로 밀기를 원하십니까? 그건 말이되지 않습니다. 배열을 사용하십시오. – meagar

+0

원본 포스터에는 속성을 할당 할 수있는 객체가 필요하지만 alson에는 배열이 내장되어 있습니다. –

답변

5

을 주셔서 감사합니다. ArrayAccess를 사용하여 간단한 클래스를 작성하는 문제는 성능과 투명성을 극도로 희생하는 경우를 제외하고는 본질적으로 아무것도 표시하지 않는 배열을 다시 만들었 기 때문에 의미가 없습니다.

배열을 사용하여 문제를 더 간단하게 해결할 수없는 이유가 있습니까? 아니면 그냥 알고 싶었던 질문입니까?

편집 : 자세한 내용은 this question을 확인하십시오.

+0

그럴 수도 있습니다. 그것은 내가 알고있는 질문이었습니다 : 제가 배열을 사용할 수 있다는 것을 알고 있지만 저에게 stdClass 객체를 사용하는 것은 배열 내에서 객체를 사용하려는 인스턴스에 대해 배열과 stdClass 객체를 사용하는 것보다 깔끔합니다. – significance

0

OOP를 위해서만 클래스를 사용하지 마십시오. 당신이 정말로이 기능을 구현하려면,이 클래스를 사용

class ArrayClass 
{ 
    protected $storage = array(); 

    public function push($content) { 
     $this->storage[] = $content; 
     return $this; 
    } 

    public function get($index) { 
     if (isset($this->storage[$index])) { 
      return $this->storage[$index]; 
     } else { 
      //throw an error or 
      return false; 
     } 
    } 
} 
+1

값이 null이면 isset가 false를 반환하므로 isset 대신 array_key_exists를 사용하는 것이 좋습니다. – Dereleased

1

난 정말 당신이 할 무슨 뜻인지 볼 수 없습니다,

<?php 
$obj->a = array(); 
$obj->a[] = 120; 
$obj->a[] = 382; 
// ... 
?> 

의 짧은을 할 수 있습니다 단순히 "푸시"필드 위에 객체. 어쨌든 값을 검색하려면 필드의 이름을 알아야하기 때문에 꽤 난센스입니다.

1

개체가 배열이 아닙니다. 숫자로 인덱스 된 요소를 원하면 배열을 사용하십시오.

원하는 경우 명명 된 요소는 개체 또는 연관 배열을 사용합니다.

다른 동작을 얻는 이유는 Array에서 인덱스를 지정하지 않기 때문에 PHP는 Array의 길이를 인덱스로 사용하기 때문입니다. Object를 사용하여 이름을 지정해야합니다 (이 경우 'a').

$obj = (object) array(
    'arr' => array(
     'foo', 
     'bar' 
    ) 
); 
: 또한

$obj = new stdClass; 
$obj->arr = array(); 
$obj->arr[] = 'foo'; 
$obj->arr[] = 'bar'; 

당신이 객체에 배열을 캐스팅 할 수 잊지 마세요 : 당신이 할 수

다른 것은 배열하는 멤버, 객체를 가지고있다

3

아니요, 불가능합니다. 이와 같은 괄호 ([])를 PHP에서 "ArrayAccess"라고하며 stdClass 객체에는 구현되어 있지 않습니다. 당신이 당신은 또한 어떻게되는지 확인하기 위해 stdClass로 배열을 캐스팅 시도 할 수

$foo = new stdClass(); 
$foo->items = array(); 
$foo->items[] = 'abc'; 
$foo->items[] = '123'; 
$foo->items[] = 'you and me'; 

같은 것을 할 수 있습니다처럼

는 소리가 난다.

$foo = array(); 
$foo[] = 'abc'; 
$foo[] = '123'; 
$foo[] = 'you and me'; 
$foo = (object) $foo; 
var_dump($foo); 
+0

이것은 일어납니다 : http://stackoverflow.com/questions/1869812/casing-an-array-with-numeric-keys-as-an-object – Dereleased

+1

저는 누가 그 질문을했는지 봅니다. –

+1

누가 그것을 대답했는지보세요. –

0

정확하게 이것을 JavaScript로 얻을 수 있습니다.

관련 문제