PHP에서는 배열 키 이름의 유형이 매우 중요합니다. 일반적으로 정수 또는 문자열을 배열의 키 이름으로 사용하지만 다른 유형의 값을 키 이름으로 사용하면 예상치 못한 결과로 이어질 수 있습니다. 이 기사는 PHP에서 비 스트링 또는 정수를 배열 키 이름으로 사용할 때 발생할 수있는 잠재적 인 문제와이를 처리하는 방법에 대해 설명합니다.
PHP에는 배열 키 이름에 대한 특정 사양이 있습니다. 문자열 또는 정수가 아닌 모든 데이터 유형은 키 이름으로 사용될 때 문자열로 자동 변환됩니다. PHP는 키 이름을 문자열 유형으로 변환하려고합니다. 객체, 어레이 등과 같은 복잡한 데이터 유형 인 경우 PHP는 특정 변환 규칙을 사용합니다.
예를 들어, 플로팅 포인트 번호를 배열의 키 이름으로 사용하면 PHP가 자동으로 문자열로 변환됩니다.
<?php
$array = array();
$array[1.5] = "value";
echo $array["1.5"]; // 산출 "value"
?>
위의 코드에서는 플로팅 번호 1.5를 키 이름으로 사용했지만 "1.5" 문자열로 자동 변환되며 배열에 성공적으로 저장됩니다. 액세스 중에 문자열 "1.5"를 사용하는 경우 해당 값을 여전히 올바르게 찾을 수 있습니다.
배열의 키 이름으로 객체 나 배열을 사용하려고하면 PHP가 오류를보고하거나 문자열로 변환합니다. 특정 동작은 객체 또는 배열의 구현에 따라 다릅니다.
객체를 배열의 키 이름으로 사용하면 PHP는 오브젝트의 __toString () 메소드를 호출하고 메소드가 존재하는 경우 메소드의 리턴 값을 배열의 키 이름으로 사용합니다. __toString () 메소드가 정의되지 않으면 PHP에 오류가 발생합니다.
<?php
class MyClass {
public function __toString() {
return "my_object";
}
}
$obj = new MyClass();
$array = array();
$array[$obj] = "value";
echo $array["my_object"]; // 산출 "value"
?>
__toString () 메소드가 정의되지 않으면 PHP는 다음 오류를 던집니다.
Catchable fatal error: Object of class MyClass could not be converted to string
배열을 배열의 키 이름으로 직접 사용하면 PHP가 문자열로 변환하려고 시도하고 결과는 빈 문자열 ( "" )입니다. 이 변환은 일반적으로 배열에서 키 가치 충돌을 초래합니다. 특히 여러 배열이 키로 여러 배열이있을 때 모든 키는 동일한 빈 문자열이됩니다.
<?php
$array = array();
$array[array(1, 2)] = "value";
var_dump($array); // 실수,키 이름은 빈 문자열로 변환됩니다
?>
출력 결과 :
array(1) {
[""]=> string(5) "value"
}
PHP에서는 어레이 키 이름이 정수 또는 문자열이어야하며 다른 데이터 유형은 자동으로 문자열로 변환되지만 배열 키 충돌 또는 예측할 수없는 동작과 같은 예상치 못한 결과로 이어질 수 있습니다.
정수 및 문자열 : PHP는 정수와 문자열을 배열 키 이름으로 올바르게 처리합니다.
플로팅 포인트 번호 : 플로팅 숫자는 자동으로 문자열로 변환됩니다 (예 : "1.5" ).
객체 : 객체는 문자열로 변환되며 __toString () 메소드에 의해 결정됩니다.
배열 : 배열은 빈 문자열로 변환됩니다.
개발 중에는 예측할 수없는 문제를 피하기 위해 비 스트링 또는 비 통신을 배열 키 이름으로 사용하지 않는 것이 가장 좋습니다. 다른 유형을 키 이름으로 사용해야하는 경우 사용하기 전에 유형 변환을 수행하거나 적절한 변환 로직을 구현하는 것을 고려할 수 있습니다.