首页 文章

奇怪的PHP错误:'Can' t在写上下文中使用函数返回值'

提问于
浏览
177

我收到了这个错误,我无法做出它的头或尾 .

确切的错误消息是:

致命错误:无法在第48行的/home/curricle/public_html/descarga/index.php中的写入上下文中使用函数返回值

第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 回答

  • 0

    你的意思是

    if (isset($_POST['sms_code']) == TRUE ) {
    

    虽然顺便说一句,你的意思是

    if(isset($_POST['sms_code'])) {
    
  • 3

    在函数返回上使用empty时也会发生这种情况:

    !empty(trim($someText)) and doSomething()
    

    因为empty不是一个函数而是一个语言构造(不确定),它只需要变量:

    对:

    empty($someVar)
    

    错误:

    empty(someFunc())
    

    从PHP 5.5开始,它支持的不仅仅是变量 . 但如果您在5.5之前需要它,请使用 trim($name) == false . 来自empty documentation .

  • 4
    if (isset($_POST('sms_code') == TRUE ) {
    

    将此行更改为

    if (isset($_POST['sms_code']) == TRUE ) {
    

    你正在使用parentheseis()for $_POST 但你想要方括号[]

    :)

    要么

    if (isset($_POST['sms_code']) && $_POST['sms_code']) { 
    //this lets in this block only if $_POST['sms_code'] has some value
    
  • 1

    WORDPRESS的

    代替:

    if (empty(get_option('smth')))
    

    应该:

    if (!get_option('smth'))
    
  • 12

    正确的语法(最后你的括号丢失):

    if (isset($_POST['sms_code']) == TRUE ) {
                                ^
    

    附:你不需要 == TRUE 部分,因为已经返回了BOOLEAN(true / false) .

  • 10

    这可能发生在多个场景中,下面是一个众所周知的场景列表:

    // 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.
    
  • 22

    问题出在 () 你必须去 []

    if (isset($_POST('sms_code') == TRUE)
    

    通过

    if (isset($_POST['sms_code'] == TRUE)
    
  • 111

    我也有类似你的问题 . 问题是你使用的是旧的PHP版本 . 我已升级到PHP 5.6,问题不再存在 .

  • -1

    由于语法错误导致此错误被触发的另一种情况:

    ucwords($variable) = $string;
    
  • 3

    由于语法错误,我也遇到了这个问题 . 在数组索引中使用“(”而不是“[”:

    foreach($arr_parameters as $arr_key=>$arr_value) {
            $arr_named_parameters(":$arr_key") = $arr_value;
        }
    
  • 485

    function tracker_printcomments($ issueid){global $ CFG,$ DB;

    $comments = $DB->get_records('tracker_issuecomment', array('issueid' => $issueid), 'datecreated');
    //print_object($issueid);
    

    // print_object($ comments); $ CMNT = ''; if($ comments){

    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 .= '
    '; $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;
    }

    我也为此功能获得了相同的错误

    在写上下文中不能使用函数返回值

相关问题