채택완료

클래스에서 배열 복사

Copy
class Menu{

    private $menu = array(array('name'=>'menu1'));

    public getMenu(){

        return $this->menu;

    }

}

$menu = new Menu();

$get_menu = $menu->getMenu();

$get_menu[0]['name']='test';

print_r($menu->getMenu());

위 코드에서 $get_menu는 복사된 배열이 와야하는데 밑에서 print_r을 찍어보면 클래스의 $menu 내용도 바뀌어있습니다. 위 클래스의 코드가 저게 다는 아니고 다른 메소드에서 $menu의 레퍼런스값을 불러서 처리하는 코드가 있긴한데요. getMenu메소드는 순수하게 딱 저코드뿐인데 이상하네요. getMenu 메소드에서 배열을 복사해서 리턴하는 방법이 없을까요?

|

답변 3개

채택된 답변
+20 포인트

Copy
public getMenu(){

    $array = json_encode($this->menu);

    return json_decode($array,true);

}

위처럼 해서 리턴해보세요

마지막의 print_r에서 test가 나온다는 것은 말도 안되는 설명입니다

https://sandbox.onlinephpfunctions.com/

여기서 여러가지 버전으로 테스트해 보아도

Menu에 있는 $menu는 값이 바뀌지 않네요.

답변을 작성하려면 로그인이 필요합니다.