致命错误:函数名称必须是字符串

时间:2014-11-21 20:25:06

标签: php

我尝试在初级PHP上编写此视频教程时遇到了问题。我无法让它为我工作。当我尝试在浏览器中加载项目时,我收到此错误,指出问题出现在mailprocess.php文件中我的代码的第44行。我的代码第44行与此错误有关,它是if语句的开头:if (isset($$item) && !$empty($$item))

但是,当执行视频教程的教师做同样的事情时,它对他来说很好。所以我不明白为什么它不适合我。我也有问题让我的复制/粘贴代码在这里的代码块格式工具中正确格式化,以便发布它,所以如果它不完美对齐我请耐心,因为我是新的,真的很努力尝试学习,我发现PHP相当困难。我将非常感谢任何帮助我实现这一目标的帮助。

以下是我收到的错误的浏览器输出: enter image description here

这是我的mailprocess.php文件和代码:

    <?php
        $suspect = false;
        $pattern = '/Content-Type:|Bcc:|Cc:/i'; //Perl compatible reg-x to filter     
        $empty = false;

        function isSupect($val, $pattern, &$suspect) {
          if (is_array($val)) {
            foreach ($val as $item) {
              isSuspect($item, $pattern, $suspect);
            }
          }else {
            if (preg_match($pattern, $val)) {
            $suspect = true;
          }
        }
        isSuspect($_POST, $pattern, $suspect);
       }



       if (!$suspect) {
         foreach ($_POST as $key => $value) {
           $temp = is_array($value) ? $value : trim($value); //removes white space
           if (empty($temp) && in_array($key, $required)) {
             $missing[] = $key;
              $$key = '';
           } elseif (in_array($key, $expected)) {
        $$key = $temp;
       }
      }
     }

     if (!$suspect && !$empty['$email']) {
        $validemail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
           if ($validemail) {
              $headers .= "\r\nReply-to: $validemail";
           } else {
               $errors['email'] = true;
        }
      }

    if (!$suspect && !$missing && !$errors){
        $message = ' ';
        foreach ($expected as $item) {
           if (isset($$item) && !$empty($$item)){
              $val = $$item;
            } else {
                $val = 'Not selected';
            }
            if (is_array($val)){
                $val = implode(', ', $val);
            }
        $item = str_replace(array('_', '-'), '', $item);
        $message .= ucfirst($item) . ": $val\r\n\r\n";
      }
      $message = wordwrap($message, 70);
      $mailSent = true;
    }

以下是教师在他的代码中的内容:enter image description here

2 个答案:

答案 0 :(得分:0)

if (isset($$item) && !$empty($$item))

应该是

if (isset($$item) && !empty($$item))

!$ empty()。

答案 1 :(得分:-1)

这只是一个错字。你有额外的美元符号。
只需在$之后移除美元符号!即可 改变这个 if (isset($$item) && !$empty($$item))
  TO
if (isset($$item) && !empty($$item))