Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 클래스 없이 만든 객체(stdClass)의 속성을 복제하고 NULL로 초기화하는 방법

PHP에서 클래스 정의 없이 배열을 객체로 캐스팅해 만든 객체(stdClass)의 속성을 다른 객체로 복제하면서 동시에 값을 초기화하려면, clone 키워드를 사용한 뒤 각 속성 이름에 null을 할당하는 방식을 활용할 수 있습니다.

예제

다음은 실제 동작을 확인할 수 있는 PHP 코드입니다.

<!DOCTYPE html>
<html>
<body>
<?php
$firstObject = (object)[
    "Name" => "John",
    "Age" => 20
];
$secondObject = clone $firstObject;
var_dump($firstObject);
echo "<br>";
var_dump($secondObject);
foreach ($secondObject as $keyName => $keyValue) {
    $secondObject->$keyName = null;
}
echo "<br>";
var_dump($secondObject);
$firstObject = [
    "Name" => "John",
    "Age" => 20
];
echo "<br>";
$arrayObject= array_fill_keys(array_keys($firstObject), null);
$secondObject = (object)$arrayObject;
var_dump($secondObject);
?>
</body>
</html>

코드 설명

위 예제는 두 가지 방식을 보여줍니다.

첫 번째 방식은 (object) 캐스팅으로 생성한 객체를 clone으로 복제한 후, foreach 반복문으로 모든 속성을 순회하며 각 속성값을 null로 덮어쓰는 방법입니다. 원본 객체는 그대로 유지되고, 복제된 객체만 값이 초기화됩니다.

두 번째 방식은 array_fill_keys() 함수를 활용하는 방법입니다. array_keys()로 원본 배열의 키 목록을 추출한 뒤, 해당 키들의 값을 모두 null로 채운 새 배열을 만들고 이를 다시 객체로 변환합니다. 이 방식은 복제 과정 없이 동일한 구조의 빈 객체를 한 번에 생성할 수 있어 더욱 간결합니다.

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

object(stdClass)#1 (2) { ["Name"]=> string(4) "John" ["Age"]=> int(20) }
object(stdClass)#2 (2) { ["Name"]=> string(4) "John" ["Age"]=> int(20) }
object(stdClass)#2 (2) { ["Name"]=> NULL ["Age"]=> NULL }
object(stdClass)#1 (2) { ["Name"]=> NULL ["Age"]=> NULL }

출력 결과를 보면 첫 번째와 두 번째 var_dump()에서는 복제된 객체가 원본과 동일하게 "John"과 20이라는 값을 가지고 있는 것을 확인할 수 있습니다. 이후 foreach로 속성을 초기화한 세 번째 출력에서는 모든 속성이 NULL로 변경되었으며, 마지막에는 array_fill_keys()로 생성한 객체 역시 동일한 구조에 NULL값을 가지는 것을 알 수 있습니다.