2013-04-29 2 views
0

배경 : 프로젝트에 CakePHP를 사용하고 있는데 열/필드에 NULL이있는 DB 레코드를 찾거나 저장할 때 어떤 일이 발생하는지 궁금합니다. http://goldapplesoftware.ca/blog/2011-09-storing-null-values-database-cakephpCakePHP: 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을 사용하면 표.

무슨 일이 벌어지고있는 것입니까? 누구든지 더 나은 설명이 있습니까?

+0

'null'값을 테스트하는 is_null 함수도 있습니다. – user268396

+0

그게 실제로 작동하는 방법 : 변수의 값을 'null'로 설정해도 기호 테이블에서 제거되지 않습니다. –

+1

배열의 키 'x'값이 NULL이면 첫 번째 예. 'isset ($ array [ 'x']) && $ array [ 'x'] === NULL)'은 isset()이 null 값을 false로 반환 할 때 항상 false를 반환합니다. 따라서 배열 키가 설정되어 있는지 확인하고 널 값을 가질 수 있다면 항상 array_key_exists()를 사용하십시오. – ADmad

답변

1

PHP는 자바 스크립트 및 다른 언어와 같은 스크립팅과 같은 변수를 처리합니다. PHP는 유형이 안전하지 않으므로 견고한 해시 테이블을 사용한다고 생각하는 것과 정확히 일치합니다.

변수 값을 가리키는 변수 이름 인 키가 포함되어 있다고 생각할 수 있습니다. 값은 대부분 문자열로 간주 될 수 있습니다. 이러한 키는 더 이상 필요하지 않거나 범위를 벗어날 때까지 범위에서 지속되어야합니다. 따라서 키 값을 NULL로 설정하면 NULL 값을 가리키는 키가 여전히 존재합니다. 그러나 C에서 삭제 또는 C#에서 삭제와 비슷한 변수를 완전히 제거하려면 unset 등을 사용하고 해시 테이블에서 키를 완전히 제거해야합니다.

질문에 대한 답변이 되었기를 바랍니다. 더 많은 설명을 원하면 알려주십시오.

관련 문제