Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查php中是否有类外的代码?_Php_Class - Fatal编程技术网

如何检查php中是否有类外的代码?

如何检查php中是否有类外的代码?,php,class,Php,Class,假设您在php中有一个类,其中包含函数等。如何检查类外是否没有代码? 我尝试用PHP编写此检查器,并用正则表达式和令牌编写,但没有任何效果:/ 例 <?php class example { var $name; var $password; function __construct($name, $password) { $this->name = $name; $this-&

假设您在php中有一个类,其中包含函数等。如何检查类外是否没有代码? 我尝试用PHP编写此检查器,并用正则表达式和令牌编写,但没有任何效果:/

<?php
    class example {
        var $name;
        var $password;

        function __construct($name, $password) {
            $this->name = $name;
            $this->password = $password;
        }
----Allowed code----
    }
----Not allowed code----
?>
此外,我从令牌解析数组中删除了那些在类的开始和结束之间的行。最后,我在数组中搜索与注释、空白等不同的内容

(变量是西班牙语的,如果您不理解某些变量的含义,请随意提问)

如果您想从另一个脚本中“扫描”有问题的文件以查看类外是否有任何代码,则可以使用PHP中的ReflectionClass

步骤1:获取在其中定义类的文件名

$class = new ReflectionClass("example");
$fileName = $class->getFileName();
步骤2:获取类定义在文件中占用的代码的开始行和结束行

$startLine = $class->getStartLine();
$endLine = $class->getEndLine();
$numLines = $endLine - $startLine;
步骤3:在步骤1中获得的文件名上使用file_get_contents(),查看在开始行之前或结束行之后是否有任何禁止代码。你必须测试和玩你得到的东西,因为我不知道确切地说,在GestScListIn()和GeDeNeLink()中分别考虑了“开始”和“结束”。 我希望你能明白


从这个答案中提取了一些代码:

PHP CodeSniffer是一个可以检查这一点的过滤器。我不确定确切的设置,但我想这是一个检查。但我想自己用PHP编写这个功能,以便在现实生活中检查另一个PHP文件@cgtag。我会使用lint工具,但在PHP中构建它是一个很好的练习。比人们想象的要复杂。也许你应该让我们看看你尝试了什么,这样我们就有了一些可以借鉴的东西。我们不是来写你的代码的,但是很乐意帮助你。我刚刚用我遵循的方法更新了这篇文章,谢谢@非常感谢你!它帮助了我。我刚刚用我遵循的方法更新了这篇文章。
$class = new ReflectionClass("example");
$fileName = $class->getFileName();
$startLine = $class->getStartLine();
$endLine = $class->getEndLine();
$numLines = $endLine - $startLine;