如何仅使用语法检查器输出检查PHP版本

如何仅使用语法检查器输出检查PHP版本,php,php-7,php-8,Php,Php 7,Php 8,我希望我的团队的每个成员(可靠地)报告他们正在检查语法的PHP版本。我的团队成员拥有各种操作系统、IDE和文本编辑器、各种PHP语法检查器插件,以及多个不同版本的PHP可执行文件。例如,要求他们运行php-v,可能会向他们的编辑器报告一个不同版本的语法检查 我开始研究不同版本之间语言语法的变化,我的想法是可以编写一个PHP文件,在不同版本中触发不同的语法错误。例如,在PHP8.0中,match现在是一个保留关键字。此代码在7.4中有效,并在8.0中触发意外标记“: <?php $a = m

我希望我的团队的每个成员(可靠地)报告他们正在检查语法的PHP版本。我的团队成员拥有各种操作系统、IDE和文本编辑器、各种PHP语法检查器插件,以及多个不同版本的
PHP
可执行文件。例如,要求他们运行
php-v
,可能会向他们的编辑器报告一个不同版本的语法检查

我开始研究不同版本之间语言语法的变化,我的想法是可以编写一个PHP文件,在不同版本中触发不同的语法错误。例如,在PHP8.0中,
match
现在是一个保留关键字。此代码在7.4中有效,并在8.0中触发
意外标记“

<?php
$a = match;

我同意@catchascancan和@El_Vanja在评论中提出的观点。所有项目都应该有一个商定的PHP版本,所有贡献者都应该知道如何为每个项目设置PHP版本。此外,所有更改都应该由一些中央构建/CI系统自动进行语法检查。如果其中任何一个都不存在,那就是投入时间和金钱来实现这些目标

如果在您达到这些目标之前,您需要一个额外的工具来帮助您解决编辑器的PHP语法检查器的故障,我制作了以下脚本:

<?php

// Check the syntax of this file with whatever tool you normally use
// (for example: your IDE / Sublime Text with a plugin / php -v <filename> )
// Compare the syntax error it reports with the comments below to
// determine which PHP version you have.


// PHP 8.0 will output:
// PHP Parse error:  syntax error, unexpected token ";", expecting "(" in php_syntax_version.php on line 10
$a = match;

// PHP 7.4 will output:
// PHP Parse error:  syntax error, unexpected 'fn' (T_FN), expecting identifier (T_STRING) in php_syntax_version.php on line 14
class fn{}

// PHP 7.3 will output:
// Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in file on line 19
$str = <<<FOO
abcdefg
   FOO
FOO;

// PHP 7.2 will output:
// PHP Fatal error:  Cannot use 'object' as class name as it is reserved in php_syntax_version.php on line 25
class object{}

// PHP 7.1 will output:
// PHP Fatal error:  Cannot use 'iterable' as class name as it is reserved in php_syntax_version.php on line 29
class iterable{}

// PHP 7.0 AND 5.6 will BOTH output (SEE BELOW):
// No syntax errors detected in php_syntax_version.php


// -------------------------------------------------------
// To tell between 5.6 and 7.0, uncomment these two lines:
// class C {}
// $c =& new C;

// PHP 7.0 will output:
// PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in php_syntax_version.php on line 39 !! Do not compare on the line number alone, as this can be misleading. !!

// PHP 5.6 will output:
// PHP Deprecated:  Assigning the return value of new by reference is deprecated in php_syntax_version.php on line 39 !! Do not compare on the line number alone, as this can be misleading. !!


这听起来像是我在寻找问题的解决方案。你是队长。你指导你的团队使用一个特定的版本,他们应该遵守。他们是否真的各自在一个不同的项目上工作,而该项目决定了PHP版本?听起来不像是一个团队会做的事情。如果您正朝着相同的目标努力,那么您都需要设置相同的环境(项目方面,IDE/编辑器和OSs可以由员工选择)。我想我真正的问题是,并非所有PHP程序员都知道如何确保他们的开发环境使用的是它应该使用的版本,学习如何做到这一点需要一些时间。我希望通过快速确定谁使用了错误的版本来节省他们的时间。一个简单的“这个文件中有什么语法错误”是我希望发送给他们的。然后我可以帮助那些错误版本的人。我相信,将精力集中在教授他们上,即使是对每个人进行单独的教授,也会产生比试图用定制工具弥补他们知识的不足更好的结果。这个工具只会推迟必须做的事情——统一项目语法。如果项目位于8,则在7.*时生成新代码毫无意义。