현재 위치: > 최신 기사 목록> array_fill ()이 채워진 값이 참조되거나 복사 되었습니까?

array_fill ()이 채워진 값이 참조되거나 복사 되었습니까?

M66 2025-06-05

PHP 프로그래밍에서 Array_Fill ()은 배열을 작성하고 채우는 매우 실용적인 기능입니다. 기능 서명은 다음과 같습니다.

 array array_fill(int $start_index, int $count, mixed $value)

이 기능은 지정된 시작 인덱스 위치에서 시작하고 $ count 요소가 포함 된 배열을 작성하고 동일한 $ 값 으로 채우는 것입니다. 일반적인 질문은 다음과 같습니다.이 $ 값은 값에 따라 배열에 복사됩니까, 아니면 참조별로 전달됩니까?

충전 값의 동작 : 값별로 복사하십시오

Array_Fill () 함수는 기본적으로 값별로 복사 로 채워집니다. 즉, 객체 또는 배열에 대한 참조를 채우는 경우 각 요소는 동일한 참조를 공유하는 여러 요소가 아닌 Array_Fill () 의 별도의 사본이됩니다.

예를 살펴 보겠습니다.

 $obj = new stdClass();
$obj->name = "Alice";

$filled = array_fill(0, 3, $obj);
$filled[0]->name = "Bob";

echo $filled[1]->name; // 산출 "Bob"

array_fill () 에게 값이 전달되지만 객체는 참조 의미로 존재하므로 배열의 각 항목이 동일한 객체를 가리 킵니다. 객체 중 하나의 속성을 수정하면 다른 항목도 영향을받습니다.

그러나 정수 또는 문자열과 같은 일반적인 데이터 유형으로 채워지면 각 배열 요소는 독립 값입니다.

 $filled = array_fill(0, 3, "Hello");
$filled[0] = "World";

print_r($filled);
// 산출:
// Array
// (
//     [0] => World
//     [1] => Hello
//     [2] => Hello
// )

이 예에서 $ [0]을 수정하면 다른 요소에 영향을 미치지 않으므로 문자열이 값으로 복사되었음을 나타냅니다.

참조로 채우는 방법?

각 배열 요소가 값의 사본뿐만 아니라 동일한 변수를 참조하려면 변수를 참조하여 Array_Fill ()을 사용할 수 있습니다. 예는 다음과 같습니다.

 $value = "shared";
$filled = array_fill(0, 3, &$value);

$value = "updated";
print_r($filled);
// 산출:
// Array
// (
//     [0] => updated
//     [1] => updated
//     [2] => updated
// )

이 예에서는 & $ value를 참조로 명시 적으로 사용하면 배열의 각 요소가 동일한 변수 $ 값 에 바인딩됩니다. $ 값 으로의 변경 사항은 배열의 각 항목과 동기로 반영됩니다.

그러나이 방법은 PHP에서 일반적이지 않으며 예기치 않은 행동을 일으키기 쉽다는 점에 유의하십시오. 일반적으로 여러 배열 항목이 실제로 동일한 참조를 공유 해야하는 경우에만 권장됩니다.

요약

  • array_fill ()의 기본 동작은 값별로 복사하는 것 입니다.

  • $ 값 이 객체 또는 배열 인 경우 복사 된 항목은 실제로 참조입니다 (객체는 항상 PHP에서 참조로 전달되기 때문에).

  • 진정한 공유 참조를 구현하기 위해 사용 및 $ 값을 참조 할 수 있습니다.

  • 어려운 디버깅 문제를 일으키지 않도록주의해서 참조를 사용하십시오.

array_fill () 의 충전 메커니즘에 대한 올바른 이해는 실제 프로젝트에서 잠재적 인 논리 오류를 피할 수 있습니다. 캐시 초기화, 자리 표시 자 구조 및 배치 구성과 유사한 기능 모듈을 개발하는 경우 이러한 차이를 마스터하는 것이 특히 중요합니다.

예를 들어:

 $placeholders = array_fill(0, 10, "http://m66.net/placeholder");

위의 코드는 값에서 복사되어 참조를 공유하지 않는 10 개의 고정 URL 배열을 채 웁니다.

이러한 기본 메커니즘을 이해함으로써 배열의 동작을보다 정확하게 제어하고 코드의 견고성과 유지 가능성을 향상시킬 수 있습니다.