Странная ошибка PHP: 'не удается использовать возвращаемое значение функции в контексте записи'
Я получаю эту ошибку и я не могу сделать головы или хвоста его.
точное сообщение об ошибке:
фатальная ошибка: не удается использовать функция return значение в контексте записи в /home / 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'])) {
Это также происходит при использовании пустой функции return:
!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']) == TRUE ) {
вы используете скобки () для
$_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
часть, потому что 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, и проблема больше не существует.
Я тоже столкнулся с этой проблемой из-за синтаксической ошибки. Использование " ("вместо" ["в индексе массива:
foreach($arr_parameters as $arr_key=>$arr_value) { $arr_named_parameters(":$arr_key") = $arr_value; }
функция tracker_printcomments($issueid) { global $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;
}Я также получаю ту же ошибку для этой функции
невозможно использовать возвращаемое значение функции в контексте записи