배경 : 프로젝트에 CakePHP를 사용하고 있는데 열/필드에 NULL이있는 DB 레코드를 찾거나 저장할 때 어떤 일이 발생하는지 궁금합니다. http://goldapplesoftware.ca/blog/2011-09-storing-null-values-database-cakephp과 CakePHP: Find where field is not null에 따르면 CakePHP는 (일반적으로) MySQL NULL 열을 PHP의 NULL 값으로 변환합니다. 이것은 내 직감 (PHP에서는 NULL = DB의 NULL)에는 좋지만 PHP에서는 놀랍도록 까다로운 편입니다.PHP가 내부적으로 변수를 관리하는 방법에 대한 간결하고 직관적 인 설명?
배열 슬롯이 정의되어 있는지 확인하고 싶지만 NULL 값이 있는지 확인하고 싶습니다.
철저한-하지만-혼란 http://php.net/manual/en/types.comparisons.php을 통해 읽은 후, 다음는 isset ( http://php.net/manual/en/language.types.null.php, 가장 유용 포함) 널 (null)에 해제하고, 여러 페이지 나는 Check if Variable exists and === true로 다소간 같은 결론에 도착했다. 즉, 당신은 확인할 수있는 변수 (배열이나, :if(array_key_exists('x', $array) && $array['x'] === NULL)
)
if (isset($array['x']) && $array['x'] === NULL)
정의 (그러나 null 값을 가지고) 경우
내 질문 : I PHP가 내부적으로 변수를 처리하는 방법에 대한 간결하고 직관적 인 설명을 찾고 있습니다.
내가 읽은 모든 것을 숙고 한 후에 내가 가진 가장 가까운 정신 모델은 JavaScript Scope Chain (Scope Chain in Javascript)입니다. PHP에서 변수를 정의하는 것은 심볼 테이블/엔트리에 해시 테이블에 심볼을 추가하는 것으로 보인다. 그 변수에 NULL을 할당하면 이름이 제거되지 않지만 값이 NULL로 겹쳐 쓰게된다. unset을 사용하면 표.
무슨 일이 벌어지고있는 것입니까? 누구든지 더 나은 설명이 있습니까?
'null'값을 테스트하는 is_null 함수도 있습니다. – user268396
그게 실제로 작동하는 방법 : 변수의 값을 'null'로 설정해도 기호 테이블에서 제거되지 않습니다. –
배열의 키 'x'값이 NULL이면 첫 번째 예. 'isset ($ array [ 'x']) && $ array [ 'x'] === NULL)'은 isset()이 null 값을 false로 반환 할 때 항상 false를 반환합니다. 따라서 배열 키가 설정되어 있는지 확인하고 널 값을 가질 수 있다면 항상 array_key_exists()를 사용하십시오. – ADmad