최근 버그를 발견했습니다. 간단히 설명 할 수 없습니다. 아주 간단한 문제이기 때문에 그렇게 열심히해서는 안되지만, PHP가 이런 일을 저지르는 이유를 모르겠습니다.이상한 PHP가 묻지 않고 백도어 쓰기
의이 간단한 코드를 보자 :
session_start();
$temp = new stdClass;
$temp->id = 1;
$temp->name = "A";
$_SESSION['temp_obj'] = $temp;
$data = new stdClass;
$data->temp = $_SESSION['temp_obj'];
$data->temp->name = 'B';
print_r($_SESSION['temp_obj']);
출력을 말해야한다 :
stdClass Object ([id] => 1 [name] => A)
하지만 그 대신, 그것은 말한다 ... 그래서
stdClass Object ([id] => 1 [name] => B)
을하는 $ _SESSION , 변경되었으며, 코드에는 아무 것도 없습니다 ...
$_SESSION['temp_obj'] = $data->temp;
그래서 $ _SESSION 값을 덮어 쓰면 안됩니다. 또한 $ temp 변수를 덮어 씁니다.
오류가 표시되지 않습니다.
누구든지이 문제에 대해 나에게 약간의 빛을 줄 수 있습니까?
감사합니다.
객체 그냥 포인터입니다. 그들은 영향을 미칩니다. –