Странная ошибка PHP: "невозможно использовать возвращаемое значение функции в контексте записи"
Я получаю эту ошибку, и я не могу понять ее.
точное сообщение об ошибке:
неустранимая ошибка: не удается использовать функцию return значение в контексте записи в / главная / curricle/public_html/descarga / index.РНР по строке 48
строка 48-это:
if (isset($_POST('sms_code') == TRUE ) {
кто-нибудь знает, что происходит???
PS вот полная функция, если это поможет:
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);
}
11 ответов
Вы имеете в виду
if (isset($_POST['sms_code']) == TRUE ) {
хотя, кстати, вы действительно имеете в виду
if(isset($_POST['sms_code'])) {
Это также происходит при использовании empty для возврата функции:
!empty(trim($someText)) and doSomething()
потому что empty - это не функция, а языковая конструкция (не уверена), и она принимает только переменные:
правильно:
empty($someVar)
неправильно:
empty(someFunc())
начиная с PHP 5.5, он поддерживает больше, чем переменные. Но если вам это нужно до 5.5, используйте trim($name) == false
. От пустые документации.
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
правильный синтаксис (в конце у вас отсутствовали круглые скобки):
if (isset($_POST['sms_code']) == TRUE ) {
^
p.s. вам не нужно == TRUE
part, потому что BOOLEAN (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)
by
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;
}
функция tracker_printcomments($issueid) { глобальный $ CFG, $DB;
$comments = $DB->get_records('tracker_issuecomment', array('issueid' => $issueid), 'datecreated');
//print_object($issueid);
/ / print_object($comments); $cmnt="; если ($комментарии) {
foreach ($comments as $comment)
{
$user = $DB->get_record('user', array('id' => $comment->userid));
$cmnt .= '<tr>';
$cmnt .= '<td valign="top" class="commenter" width="30%">';
$cmnt .= tracker_print_user($user); //2
$cmnt .= '<br/>';
$cmnt .= '<span class="timelabel">'.userdate($comment->datecreated).'</span>';
$cmnt .= '</td>';
$cmnt .= '<td colspan="3" valign="top" align="left" class="comment">';
//echo '<td colspan="3" valign="bottom" align="left" class="alinks">' ;
if($comment->attachmentid)
$attachment= $DB->get_records_sql("SELECT * FROM {files} WHERE filename != '.' AND itemid =$comment->attachmentid");
$cmnt .= $comment->comment;
//print_object($attachment);
//echo '<span colspan="3" valign="bottom" align="left" class="alinks">';
if(!empty($attachment))
{
$out = array();
$fs = get_file_storage();
foreach($attachment as $attachments)
{
$files = $fs->get_area_files($attachments->contextid, 'user', 'draft',$comment->attachmentid, 'id', false);
}
foreach($files as $file)
{
$filename = $file->get_filename();
$ctxid = $file->get_contextid();
$component = $file->get_component();
$itemid = $file->get_itemid();
$url = $CFG->wwwroot."/draftfile.php/$ctxid/user/draft/$itemid/$filename";
$out[] = html_writer::link($url, $filename);
}
$br = html_writer::empty_tag('br');
$cmnt .= implode($br, $out);
}
//$cmnt= $comment->comment;
// $cmnt= '</span>';
$cmnt .= '</td>';
$cmnt .= '</tr>';
}
}
возврат $cmnt;
}
Я также получаю ту же ошибку для этой функции
невозможно использовать возвращаемое значение функции в контексте записи