PHP解析/语法错误;如何解决这些问题

PHP解析/语法错误;如何解决这些问题,php,javascript,parsing,debugging,syntax-error,Php,Javascript,Parsing,Debugging,Syntax Error,每个人都会遇到语法错误。即使是有经验的程序员也会打字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释错误消息,例如: PHP解析错误:语法错误,第20行index.PHP中出现意外的“{” 意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略概念 始终查看代码上下文。语法错误通常隐藏在前面提到的代码行或前面的代码行中。请将代码与手册中的语法示例进行比较 虽然不是每个案例都与另一个相匹配,但也有一些案例。 本参考文献总结了常见的陷阱:

每个人都会遇到语法错误。即使是有经验的程序员也会打字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释错误消息,例如:

PHP解析错误:语法错误,第20行index.PHP中出现意外的“{”

意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略概念

始终查看代码上下文。语法错误通常隐藏在前面提到的代码行或前面的代码行中。请将代码与手册中的语法示例进行比较

虽然不是每个案例都与另一个相匹配,但也有一些案例。 本参考文献总结了常见的陷阱:


  • (逗号)

  • (期间)

  • (分号)

  • (星号)

  • (冒号)

  • (通过引用传递呼叫时间)

密切相关的参考文献:

echo "This is only $valid[here] ...";
以及:

  • 世界及其各种
  • 或者维基百科的
  • 最后当然是我们的
虽然Stack Overflow也欢迎新手程序员,但它主要针对专业编程问题

  • 回答每个人的编码错误和狭隘的打字错误通常被认为是离题的
  • 因此,在发布语法修复请求之前,请花时间遵循以下步骤
  • 如果您仍然必须这样做,请展示您自己的解决方案、尝试的修复,以及您对什么看起来或可能是错误的思考过程
如果您的浏览器显示错误消息,如“SyntaxError:非法字符”,那么它实际上并不相关,而是一个-


<强>厂商代码中出现的语法错误:最后,考虑到如果编辑代码库没有引起语法错误,但在外部供应商包安装或升级后,可能是由于PHP版本不兼容,所以检查供应商对平台设置的要求。

语法错误是什么? PHP属于语言和编程语言。它有严格的语法规则,当遇到错误放置的符号或标识符时无法恢复。它无法猜测您的编码意图

最重要的提示 您可以随时采取以下几项基本预防措施:

  • 使用适当的代码缩进,或采用任何高尚的编码风格。 可读性可防止不规则

  • 使用带有突出显示的语法。 这也有助于圆括号/支架的平衡

  • 请阅读手册中的示例。 第二次,变得有点熟练

如何解释解析器错误 典型的语法错误消息如下:

分析错误:语法错误,意外的T_字符串,在行的file.php中应为'
'

其中列出了语法错误的可能位置。请参阅所提到的文件名行号

例如
T\u STRING
解释了解析器/标记器最终无法处理的符号。然而,这不一定是语法错误的原因

查看以前的代码行也很重要。语法错误通常只是先前发生的错误。错误行号正是解析器最终放弃处理它的地方

解决语法错误 有许多方法可以缩小和修复语法问题

  • 打开提到的源文件。查看提到的代码行

    • 对于失控的字符串和放错位置的运算符,这通常是找到罪魁祸首的地方

    • 从左到右阅读这一行,想象每个符号的作用

  • 您还需要更经常地查看前面的几行

    • 特别是,前一行结尾/语句中缺少分号。;(至少从文体角度来看是这样)

    • 如果
      {
      代码块
      }
      被错误地关闭或嵌套,您可能需要进一步研究源代码。使用适当的代码缩进来简化这一过程

  • 请看语法着色

    • 字符串、变量和常量都应该有不同的颜色

    • 运算符
      +-*/.
      也应着色为不同的。否则,它们可能位于错误的上下文中

    • 如果您看到字符串着色扩展得太远或太短,那么您发现了一个未切换或缺少的结束标记
      字符串标记

    • 两个相同颜色的标点符号相邻也可能意味着麻烦。通常,如果运算符后面不是
      ++
      --
      或括号,则运算符是孤立的。在大多数上下文中,两个直接紧跟在后面的字符串/标识符是不正确的

  • 空白是你的朋友。 遵循任何编码风格。

  • 暂时打散长队

    • 您可以在运算符或常量和字符串之间自由地添加换行符
              ⇓
       func1()
       $var = 1 + 2;     # parse error in line +2
      
                                      ⇓
       print "Here comes the value: "  $value;
      
                  ⇓
       print 4 + 7 $var;
      
                                             ⇓
       $var = array("1" => $val, $val2, $val3 $val4);
      
                                       ⇓
       function myfunc($param1, $param2 $param3, $param4)
      
       class xyz {      ⇓
           var $value = $_GET["input"];
      
                    ⇓
       $this->myFunc$VAR();
      
              ⇓
       foreach $array as $key) {
      
                             ⇓
       if ($var = pdo_query($sql) {
            $result = …
      
           ⇓
      else ($var >= 0)
      
           ⇓
      function() use $var {}
      
      <?php
                                ⇐
      $var = new PDO(...);
      
                     ⇓                  ⇓
       echo "<a href="http://example.com">click here</a>";
      
      $text = '<div>some text with <?php echo 'some php entry' ?></div>'
      
                                                             ⇓
      echo "Some text", $a_variable, "and some runaway string ;
      success("finished");
               ⇯
      
      $text = ’Something something..’ + ”these ain't quotes”;
      
             ⇓
      func1()
      function2();
      
            ⇓
      <?xml version="1.0"?>
      
      <?php
          print 123;
      
      <?php
          ;print 123;
      
      public stdClass $obj;
      
                                ⇓     ⇓
      echo "Here comes a $wrong['array'] access";
      
      echo "This is only $valid[here] ...";
      
      echo "Use {$array['as_usual']} with curly syntax.";
      
                             ⇓
      print "Hello " . WORLD  " !";
      
                      ⇓
      print "<a href="' . $link . '">click here</a>";
            ⌞⎽⎽⎽⎽⎽⎽⎽⎽⌟⌞⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⌟⌞⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⌟
      
      print "<a href=\"{$link}\">click here</a>";
      
                     ⇓
       make_url(login', 'open');
      
      array(               ⇓
           "key" => "value"
           "next" => "....",
      );
      
                               ⇓
      myfunc(123, "text", "and"  "more")
      
                                      ⇓
      mysql_evil("SELECT * FROM stuffs);
      print "'ok'";
            ⇑
      
      print <<< HTML
          <link..>
          HTML;
         ⇑
      
      function header_fallback($value, $expires = time() + 90000) {
      
      class xyz {                   ⇓
          var $default = get_config("xyz_default");
      
      <?php      ⇓
          print $(document).text();
      
                ⇓
      if (isset(($_GET["id"]))) {
      
                    ⇓
      callfunc(1, 2, );
      
                     ⇓
      $var = 2 * (1 + );
      
                         ↓    ⇓
      foreach ($array as wrong) {
      
                                    ⇓
      if (($x == $y) && (2 == true) {
      
                 ⇓
      $var = 5 * {7 + $x};
      
                            ⇓
      print "Hello {$world[2{]} !";
      
      function whatever() {
          doStuff()
      }            ⇧
      
      function doStuff() {
          if (true)    ⇦
              print "yes";
          }
      }   ⇧
      
                       ⇓
      function whatever {
      }
      
        ⇓
      if {
      }
      
                   ⇓
      $x = myfunc()
      if (true) {
      
      class xyz {
          if (true) {}
          foreach ($var) {}
      
                         ⇓
      $var = array(1, 2, foreach($else as $_), 5, 6);
      
                     ⇓
      print "Oh, " . if (true) { "you!" } . " won't work";
      // Use a ternary condition here instead, when versed enough.
      
                ⇓
      echo 123, echo 567, "huh?";
      
          foreach ($errors as $error); <-- should be : or {
      
      print <<< END
          Content...
          Content....
        END;
      # ↑ terminator isn't exactly at the line start
      
      $php53 = array(1, 2, 3);
      $php54 = [1, 2, 3];
               ⇑
      
      $result = get_whatever()["key"];
                            ⇑
      
      protected $var["x"] = "Nope";
                    ⇑
      
      foreach [$a as $b)
              ⇑
      
      function foobar[$a, $b, $c] {
                     ⇑
      
      $var = const[123];
             ⇑
      
      global $var['key'];
      
      function foobar($a, $b, $c] {
                                ⇑
      
      $var = 2];
      
      $array = [1,[2,3],4,[5,6[7,[8],[9,10]],11],12]],15];
                                                   ⇑
      
                              ⇓
      if (($foo < 7) && $bar) > 5 || $baz < 9) { ... }
                            ↑
      
                              ⇓
      if (empty($_POST["var"] == 1)) {
      
                          ⇓
      if (isset($variable !== "value")) {
      
               ⇓
      if ($var => 5) { ... }
      
                       ⇓
      if ($xyz > 5 and < 100)
      
                        ⇓
       $reult = (5 < $x < 10);
      
                              ⇓
      print "<a href='z">Hello</a>";
                       ↑
      
      <?php echo <?php my_func(); ?>
                 ↑
      
      if((!($opt["uniQartz5.8"]!=$this->check58)) or (empty($_POST['poree']))) {if
      ($true) {echo"halp";} elseif((!$z)or%b){excSmthng(False,5.8)}elseif (False){
      
      if (true) {
           if (false) {
                    …
           }
           elseif ($whatever) {
               if ($something2) {
                   …
               } 
               else {
                   …
               }
           }
           else {
               …
           }
           if (false) {    //   a second `if` tree
               …
           }
           else {
               …
           }
      }
      elseif (false) {
          …
      }
      
                         ⇓
      echo "<a href='" . if ($link == "example.org") { echo …
      
      echo "<a href='" . ($link ? "http://yes" : "http://no") . "</a>";
      
      if ($link) { $href = "yes"; } else { $href = "no"; }
      echo "<a href='$href'>Link</a>";
      
      $var = if ($x == $y) { "true" };
      
      if ($x == $y) { $var = "true"; }
      
                          ⇓
      if ($x == true and (if $y != false)) { ... }
      
                      ⇓
      $var = 1 + 2 + 3
      if (true) { … }
      
                  ⇓
      if ($x == 5);
      {
          $y = 7;
      }
      else           ←
      {
          $x = -1;    
      }
      
      if ($x) { x_is_true(); }; else { something_else(); };
      
      if (true)
          $x = 5;
      elseif (false)
          $x = 6;
          $y = 7;     ←
      else
          $z = 0;
      
      if ($a) { … }
      else { … }
      elseif ($b) { … }
      ↑
      
      class xyz {
          if (true) {
              function ($var) {}
          }
      
      <?php if ($x) { ?>
          html
      <?php } ?>
      <?php elseif ($y) { ?>
          html
      <?php } ?>
      
      <?php if ($x) { ?>
          html
      <?php } elseif ($y) { ?>
          html
      <?php } ?>
      
      if (true) {
      }
      echo "in between";    ←
      elseif (false) {
      }
      ?> text <?php      ←
      else {
      }
      
      foreach ($array as $i) {
          if ($i) { … }
      }
      else { … }
      
             ⇓
      if ($x = true) { }
      else { do_false(); }
      
      $1   // Bad
      $_1  // Good
      
      #                         ↓            ⇓  ↓
      preg_replace("/#(\w+)/e",  strtopupper($1) )
      
             ↓
      $json->0->value
      
      #            ↓ ↓
      $xy = array(1 2 3);
      
      #                 ↓ ↓          
      echo "<td colspan="3">something bad</td>";
      
               ↓
      function 123shop() {
      
      <?= $a ?? 2; // works in PHP 7+
      <?= (!empty($a)) ? $a : 2; // All versions of PHP
      
      function add(?int $sum): ?int {
      
      <?php while($query->fetch()): ?>
       ....
      <?php endwhile; ?>
      
      <?php while($query->fetch()) { ?>
        ....
      <?php } ?>
      
      function concatenate($transform, ...$strings) {
          $string = '';
          foreach($strings as $piece) {
              $string .= $piece;
          }
          return($transform($string));
      }
      
      echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples");
      // This would print:
      // I'D LIKE 6 APPLES
      
      $parts = ['apple', 'pear'];
      $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
      // ['banana', 'orange', 'apple', 'pear', 'watermelon'];
      
      $table->string(column:'Name');
      
          public $aliases = [
              'csrf'=> \CodeIgniter\Filters\CSRF::class,
              'toolbar'=> \CodeIgniter\Filters\DebugToolbar::class,
              'honeypot'=> \CodeIgniter\Filters\Honeypot::class,
              'auth' => \App\Filters\Auth::class,
      ];