【问题标题】:PHP: Only include files when running phing?PHP:运行 phing 时只包含文件?
【发布时间】:2010-10-26 21:37:04
【问题描述】:

我有以下文件夹结构:

/main
    /loader.php
    /build.xml
    /components
        /package1
            /class1.php
        /package2
            /class2.php
    /tests
        /package1
            /class1.test.php
        /package2
            /class2.test.php

当我运行 Web 应用程序时,我首先加载 loader.php 并通过调用 Loader::load( 'package_name' ) 包含其他组件。然后包括所有必要的文件。这里的好处是我不需要在类文件中包含loader.php,因为我可以依赖Loader 的工作实例。

单元测试类通过显式包含所有必要的类来模拟这种行为。所以 phing 和 PHPUnit 也没有问题。

但现在我想用 phing 和 Xdebug 生成覆盖率报告。这里的问题是 phing 似乎加载了每个 PHP 文件来创建覆盖数据库。不幸的是,它停止了,因为它找不到 PHP 文件中使用的 Loader 类。

我可以轻松地将include 语句添加到每个类文件中,但我想知道是否只有在代码覆盖分析检查文件时才包含文件?

其他想法:我还可以配置覆盖分析,使其扫描单元测试目录,从而找到所有必要的包含。然后我需要过滤与/Test$/i 等模式匹配的类。可能吗?

【问题讨论】:

    标签: include xdebug phing


    【解决方案1】:

    我寻找了类似的年龄。

    最后,我完成了以下更改。基本上你告诉 php cli 在前面添加一个包含加载逻辑的 php 文件。

    在我的 cli 的 php.ini 中,我设置了以下内容:

    auto_prepend_file = autoload.php

    我确保该文件位于我的包含路径(在我的例子中是 /usr/share/php)并在其中放入以下行(我使用 Zend Framework,它也在我的包含路径中):

    require_once "Zend/Loader/Autoloader.php"; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Model_');

    现在,您可以做的是定义您的 __autoload 函数并定义需要自动加载的内容,但您明白了。

    这是一个丑陋的黑客,但它为我完成了一些事情。

    工作 杰伦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2018-02-24
      • 2011-09-18
      • 2012-11-10
      • 2012-02-13
      相关资源
      最近更新 更多