과거에 실제로 몇 번이나 만든 평범한 프로그래밍 오류로 인해 세터가 의도적으로 깨진 다음 코드를 고려하십시오.
<?php
class TestClass {
private $testField;
function setField($newVal) {
$testField = $newVal;
// deliberately broken; should be `$this->testField = $newVal`
}
function getField() {
return $this->testField;
}
}
$testInstance = new TestClass();
$testInstance->setField("Hello world!");
// Actually prints nothing; getField() returns null
echo $testInstance->getField();
?>
내가 $testField
클래스의 최상위에 선언했다는 사실은 저의 프로그래밍 오류를 숨기는 데 도움이됩니다. 필드를 선언하지 않으면이 스크립트를 호출 할 때 오류 로그에 다음 경고와 비슷한 내용이 표시됩니다.이 오류는 디버깅에 도움이 될 것입니다. 특히 크고 복잡한 실제 응용 프로그램 :
PHP 공지 : 정의되지 않은 속성 : 13 행의 /var/www/test.php에있는 TestClass :: $ testField
선언하면 경고가 없습니다.
어쩌면 나는 뭔가를 놓치고 있지만 PHP에서 클래스 필드를 선언 해야하는 두 가지 이유 만 알고 있습니다. 첫 번째로 선언은 문서로 작동하고 두 번째로 선언 없이는 private
및 protected
수정자를 사용할 수 없다는 것입니다. 틀림없이 유용하다. 후자의 주장은 객체의 선언되지 않은 필드에 할당하면 공개 필드에 적용되지 않으므로 공개 필드 선언을 적어도 주석 처리해야한다고 생각합니다. 주석은 똑같은 문서 값을 제공하지만 초기화되지 않은 필드를 읽으려고하면 경고의 이점이 있습니다.
그러나 더 생각하면 거기서 멈추는 것이 합리적이지 않은 것 같습니다. 내 경험상 초기화되지 않은 필드를 읽으려는 것은 개인 또는 보호 된 필드를 부적절하게 읽거나 수정하려고 시도하는 것보다 오류의 훨씬 더 일반적인 원인이기 때문에 (저는 짧은 프로그래밍 경력에서 이미 여러 번 수행했지만 후자는 결코 아닙니다. ), 공개 선언뿐만 아니라 모든 필드 선언을 주석 처리하는 것이 가장 좋습니다.
주저하는 것은 다른 사람이 코드에서 그것을 본 적이 없다는 것입니다. 왜 안돼? 내가 모르는 클래스 필드를 선언하면 이점이 있습니까? 또는 실제 필드 선언을 사용하고 "정의되지 않은 속성"경고의 이점을 얻을 수 있도록 필드 선언의 동작을 변경하는 방법으로 PHP 구성을 수정할 수 있습니까? 아니면 내가 분석에서 놓친 것이 있습니까?
TRUE === $variable
비교하지 않고 실수로 할당하는 것을 방지 하는 것과 같습니다.