이상한 PHP 오류: '쓰기 컨텍스트에서 함수 반환 값을 사용할 수 없습니다'
나는 이 오류가 발생하고 있어서 전혀 이해할 수 없다.
정확한 오류 메시지는 다음과 같습니다.
치명적인 오류:/home/curricle/public_html/descarga/index.php의 쓰기 컨텍스트에서 함수 반환 값을 사용할 수 없습니다.
회선 48:
if (isset($_POST('sms_code') == TRUE ) {
대체 무슨 일이 벌어지고 있는 거야?
풀 기능은 다음과 같습니다.
function validate_sms_code() {
$state = NOTHING_SUBMITED;
if (isset($_POST('sms_code') == TRUE ) {
$sms_code = clean_up($_POST('sms_code'));
$return_code = get_sepomo_code($sms_code);
switch($return_code) {
case 1:
//no error
$state = CORRECT_CODE;
break;
case 2:
// code already used
$state = CODE_ALREADY_USED;
break;
case 3:
// wrong code
$state = WRONG_CODE;
break;
case 4:
// generic error
$state = UNKNOWN_SEPOMO_CODE;
break;
default:
// unknown error
$state = UNKNOWN_SEPOMO_CODE;
throw new Exception('Unknown sepomo code: ' . $return_code);
break;
}
} else {
$state = NOTHING_SUBMITED;
}
dispatch_on_state($state);
}
이 문제는 함수 반환 시 empty를 사용하는 경우에도 발생합니다.
!empty(trim($someText)) and doSomething()
공백은 함수가 아니라 언어 구성(확실하지 않음)이며 변수만 사용하기 때문입니다.
오른쪽:
empty($someVar)
틀렸다:
empty(someFunc())
PHP 5.5 이후로는 변수 이상을 지원합니다.그러나 5.5 이전 버전이 필요한 경우trim($name) == false
. 빈 문서로부터.
그러니까 당신 말은
if (isset($_POST['sms_code']) == TRUE ) {
덧붙여서 당신은 정말로
if (isset($_POST['sms_code'])) {
if (isset($_POST('sms_code') == TRUE ) {
이 행을 로 바꾸다
if (isset($_POST['sms_code']) == TRUE ) {
parentheseis()를 다음에 사용하고 있습니다.$_POST
대괄호 []가 필요했습니다.
:)
또는
if (isset($_POST['sms_code']) && $_POST['sms_code']) {
//this lets in this block only if $_POST['sms_code'] has some value
WORDPRESS의 경우:
다음 대신:
if (empty(get_option('smth')))
다음 항목이어야 합니다.
if (!get_option('smth'))
올바른 구문(마지막에 괄호가 누락되었습니다):
if (isset($_POST['sms_code']) == TRUE ) {
^
p.s. 필요 없습니다.== TRUE
부울(true/false)이 이미 반환되었기 때문입니다.
이 문제는 여러 시나리오에서 발생할 수 있습니다.다음은 잘 알려진 시나리오 목록입니다.
// calling empty on a function
empty(myFunction($myVariable)); // the return value of myFunction should be saved into a variable
// then you can use empty on your variable
// 괄호를 사용하여 배열의 요소에 액세스하고 괄호를 사용하여 함수를 호출합니다.
if (isset($_POST('sms_code') == TRUE ) { ...
// that should be if(isset($_POST['sms_code']) == TRUE)
이는 다음과 같은 함수의 결과를 증가시키려고 할 때도 트리거될 수 있습니다.
$myCounter = '356';
$myCounter = intVal($myCounter)++; // we try to increment the result of the intVal...
// like the first case, the ++ needs to be called on a variable, a variable should hold the the return of the function then we can call ++ operator on it.
문제는 에 있습니다.()
여기서 나가야 해.[]
if (isset($_POST('sms_code') == TRUE)
타고
if (isset($_POST['sms_code'] == TRUE)
나도 너와 비슷한 문제가 있었어.문제는 오래된 php 버전을 사용하고 있다는 것입니다.PHP 5.6으로 업그레이드하여 문제가 발생하지 않게 되었습니다.
구문 오류로 인해 이 오류가 트리거되는 또 다른 시나리오:
ucwords($variable) = $string;
나도 구문 오류로 인해 이 문제에 부딪혔다.어레이 인덱스에서 "" 대신 ""를 사용합니다.
foreach($arr_parameters as $arr_key=>$arr_value) {
$arr_named_parameters(":$arr_key") = $arr_value;
}
이 오류는 매우 정확하며 컨텍스트 구문 문제가 강조됩니다.모든 종류의 "할당 불가" 구문을 실행하여 재생할 수 있습니다.예:
함수 구문($hello) { } attempt attempt 、 함수를 속성처럼 호출하여 값을 할당합니다.$this->Syntax('Hello') = 'World';
구문적으로 문장이 잘못되었기 때문에 위의 오류가 발생합니다.'월드'의 올바른 할당은 사용자가 사용한 컨텍스트에 쓸 수 없습니다(즉, 이 컨텍스트에 구문적으로 올바르지 않습니다).'함수 반환 값을 사용할 수 없습니다' 또는 '읽기 전용이므로 함수에 오른쪽 값을 할당할 수 없습니다'로 표시될 수 있습니다.
OPS 코드의 특정 에러는, 각 괄호 대신에 괄호를 사용해 강조 표시되고 있습니다.
잘못된 연산자 =이(가) 원인일 수 있습니다. 이때는 ==이어야 함수는 ==입니다.
if(mysql_num_rows($result) = 1)
return $result;
else
return false;
이 코드는 이 오류를 발생시킵니다.
=은(는) 할당 연산자이며 비교 연산자가 아닙니다.수정은 =를 ==로 변경하는 것입니다.
언급URL : https://stackoverflow.com/questions/1532693/weird-php-error-cant-use-function-return-value-in-write-context
'programing' 카테고리의 다른 글
클래스는 클래스를 확장하고 인터페이스를 구현할 수 있습니까? (0) | 2022.11.22 |
---|---|
쿼리 구문으로 바꾸기 (0) | 2022.11.22 |
MySQL/MariaDB: 표준 시간대와 함께 날짜 저장 (0) | 2022.11.22 |
변경 시 선택한 파일의 전체 경로를 가져오는 방법변경 시 선택한 파일의 전체 경로를 가져오는 방법javascript, jquery-discript를 사용할까요?javascript, jquery-discript를 사용할까요? (0) | 2022.11.22 |
정수 집합이 다른 정수 집합의 부분 집합인지 확인 (0) | 2022.11.22 |