PHP解析/语法错误;如何解决这些问题
每个人都会遇到语法错误。即使是有经验的程序员也会打字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释错误消息,例如: PHP解析错误:语法错误,第20行index.PHP中出现意外的“{” 意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略概念 始终查看代码上下文。语法错误通常隐藏在前面提到的代码行或前面的代码行中。请将代码与手册中的语法示例进行比较 虽然不是每个案例都与另一个相匹配,但也有一些案例。 本参考文献总结了常见的陷阱:PHP解析/语法错误;如何解决这些问题,php,javascript,parsing,debugging,syntax-error,Php,Javascript,Parsing,Debugging,Syntax Error,每个人都会遇到语法错误。即使是有经验的程序员也会打字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释错误消息,例如: PHP解析错误:语法错误,第20行index.PHP中出现意外的“{” 意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略概念 始终查看代码上下文。语法错误通常隐藏在前面提到的代码行或前面的代码行中。请将代码与手册中的语法示例进行比较 虽然不是每个案例都与另一个相匹配,但也有一些案例。 本参考文献总结了常见的陷阱:
- …
- (逗号)
- (期间)
- (分号)
- (星号)
- (冒号)
- (通过引用传递呼叫时间)
echo "This is only $valid[here] ...";
- 世界及其各种
- 或者维基百科的
- 最后当然是我们的
- 回答每个人的编码错误和狭隘的打字错误通常被认为是离题的
- 因此,在发布语法修复请求之前,请花时间遵循以下步骤
- 如果您仍然必须这样做,请展示您自己的解决方案、尝试的修复,以及您对什么看起来或可能是错误的思考过程
<强>厂商代码中出现的语法错误:最后,考虑到如果编辑代码库没有引起语法错误,但在外部供应商包安装或升级后,可能是由于PHP版本不兼容,所以检查供应商对平台设置的要求。
语法错误是什么? 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'"; ⇑
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, ];
- 您可以在运算符或常量和字符串之间自由地添加换行符