다음 코드는 작동해야한다고 생각하지만 작동하지 않습니다 (편집 : 이제 PHP 5.5 이상에서 작동합니다) .
if (!empty($r->getError()))
어디 getError()
단순히 :
public function getError()
{
return $this->error;
}
그러나 나는이 오류로 끝납니다.
쓰기 컨텍스트에서 메서드 반환 값을 사용할 수 없습니다
이것은 무엇을 의미 하는가? 이 책은 읽지 않습니까?
답변
empty()
(참조가 존재하는 것을 가리키는 지 확인하기 위해) 참조로 값에 액세스해야하며 5.5 이전의 PHP는 함수에서 반환 된 임시 값에 대한 참조를 지원하지 않았습니다.
그러나 실제 문제는 empty()
“빈”값이 “거짓”과 다르다고 잘못 생각하는 것입니다.
빈은에 대한 별칭입니다 !isset($thing) || !$thing
. 당신이 확인하고있는 것이 항상 존재할 때 (PHP에서 함수 호출의 결과는 항상 존재합니다), empty()
함수는 부정 연산자 일뿐입니다 .
PHP 에는 공허함 개념이 없습니다 . false로 평가되는 값은 비어 있고 true로 평가되는 값은 비어 있지 않습니다. 그건 같은거야. 이 코드는 :
$x = something();
if (empty($x)) …
이:
$x = something();
if (!$x) …
한 항상 같은 결과, 모든 경우에, 모든 데이터 유형을 위해 (때문에 $x
정의 empty()
중복).
메서드의 반환 값은 항상 존재합니다 ( return
구문 이 없거나 반환 값이 존재하고 포함 null
). 따라서:
if (!empty($r->getError()))
논리적으로 다음과 같습니다.
if ($r->getError())
답변
참고 : 이것은 높은 가시성으로 투표율이 높은 답변이지만, 불필요하고 불필요한 코딩 관행을 조장합니다! 올바른 방법은 @Kornel의 답변 을 참조하십시오 .
참고 # 2 : @ Kornel ‘s answer 사용 제안을 승인합니다 . 3 년 전에이 답변을 썼을 때, 나는 단지 대안을 보증 할 필요는 없으며 단지 오류의 본질을 설명하기위한 것일뿐입니다. 아래 코드 스 니펫은 권장되지 않습니다.
5.5 이하의 PHP 버전에서는 empty () 의 한계입니다 .
참고 : empty ()는 변수를 검사하여 구문 분석 오류가 발생합니다. 즉, empty (trim ($ name))는 작동하지 않습니다.
당신은 이것으로 변경해야 할 것입니다
// Not recommended, just illustrates the issue
$err = $r->getError();
if (!empty($err))
답변
PHP 문서 에 따르면 :
empty ()는 변수를 검사하여 구문 분석 오류가 발생합니다.
empty()
함수의 반환 값에는 직접 사용할 수 없습니다 . 대신 반환 getError()
값을 변수 로 설정하고 변수에서 실행 empty()
하십시오.
답변
나는 보통이 문제를 해결하기 위해 is_empty ()라는 전역 함수를 만듭니다.
function is_empty($var)
{
return empty($var);
}
그런 다음 일반적으로 empty ()을 사용한 곳은 is_empty ()
답변
다른 사람들이 지적했듯이, empty ()의 (이상한) 한계입니다.
대부분의 purproses의 경우이를 수행하는 것은 empty를 호출하는 것과 동일하지만 작동합니다.
if ($r->getError() != '')
답변
문제는 이것입니다. 오류가 비어 있지 않은지 알고 싶습니다.
public function getError() {
return $this->error;
}
isErrorSet () 메소드를 추가하면 문제가 해결됩니다.
public function isErrorSet() {
if (isset($this->error) && !empty($this->error)) {
return true;
} else {
return false;
}
}
이제 이것은 통지 없이이 코드에서 잘 작동합니다.
if (!($x->isErrorSet())) {
echo $x->getError();
}
답변
배열이 비어 있는지 확인하는 다른 방법은 다음과 같습니다.
count($array)>0
그 오류없이 저에게 효과적입니다.