문제

STDCLASS 객체를 일반적으로 색인화 된 배열처럼 작동시킬 수 있습니까?

ie $ array = array ([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;

나는 매번 'A'를 바꿀 수 있다는 것을 알고 있습니다.

이것이 바보 같은 질문이라면 미안하지만 어떤 이유로 든 나를 혼란스럽게합니다!

도움이 감사합니다 :)

도움이 되었습니까?

해결책

요컨대, 당신은 항상 당신의 속성을 지정해야하기 때문에 아니요. ArrayAccess로 간단한 수업을 작성하는 데 어려움을 겪는 것은 성능과 투명성의 극단적 인 희생을 제외하고는 아무것도 보여줄 것이없는 배열을 본질적으로 재현했기 때문에 의미가 없습니다.

배열을 사용하여 문제를 더욱 무한히 해결할 수없는 이유가 있습니까?

편집 : 체크 아웃 이 질문 더 많은 정보를 위해서.

다른 팁

아니, 당신은 할 수 없습니다. 브래킷 사용 ([]) PHP에서 "ArrayAccess"라고 불리며 stdClass 물체.

당신처럼 들립니다 ~할 것 같다 같은 것을 원합니다

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

당신은 또한 어떤 일이 일어나는지 확인하기 위해 배열을 stdclass로 캐스팅 할 수도 있습니다.

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

나는 당신이 무엇을 의미하는지 정말로 볼 수 없습니다.

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

당신은 단순히 필드를 물체에 "밀기"할 수 없습니다. 어쨌든 값을 검색하려면 필드 이름을 알아야하므로 거의 말도 안됩니다.

객체는 배열이 아닙니다. 수치 적으로 인덱싱 된 요소를 원한다면 배열을 사용하십시오.

이름이 지정된 요소를 원한다면 객체 또는 연관 배열을 사용하십시오.

동작이 다른 이유에 관해서는 배열에서 인덱스를 지정하지 않기 때문에 PHP는 배열의 길이를 인덱스로 사용하기 때문입니다. 객체를 사용하면 이름을 지정해야합니다 (이 경우 'A').

당신이하고 싶은 또 다른 일은 배열 인 멤버가있는 객체가있는 것입니다.

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

또한 배열을 객체에 캐스트 할 수 있다는 것을 잊지 마십시오.

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

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;
        }
    }
}

JavaScript에서 정확하게 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top