php - 在 PHP 中使用与包含

标签 php namespaces include phpunit

我正在努力了解 PHP namespace 并使用 PHPUnit 进行测试。

当我在 Windows 的命令行中运行 phpunit test.php 时,Codewars 的这些测试通过了:

<?php
require 'solution.php';
use PHPUnit\Framework\TestCase;

class myTests extends TestCase {
  public function testExamples() {
        $this->assertEquals(pair_sum([1,9,2,8,3,7,4,6,5,5,13,14,11,13,-1],10),6);
        $this->assertEquals(pair_sum([1,2,3,1],3),1);
        $this->assertEquals(pair_sum([1,3,2,2],4),2);
        $this->assertEquals(pair_sum([1],4),false);
        $this->assertEquals(pair_sum([2,3,10,-5],5),2);
  }
}

但是,当我注释掉 use PHPUnit\Framework\TestCase; 时,我得到 Class 'TestCase' not found 这是有道理的,因为没有对所需类的引用/功能。

虽然让我感到困惑的是,这里关于命名空间的很多答案都声称 use 关键字不能替代 include/require 并且这些类仍然需要被包含/自动加载(?)。

我在这里没有使用任何自动加载 - 只是一个 solution.php 文件和一个 test.php 文件中的上述测试。

有人可以解释一下我在这里缺少什么吗?测试如何在没有任何明确包含 PHPunit 功能的情况下工作?

我应该提一下,我已经通过 Composer 在全局范围内安装了 PHPUnit。

最佳答案

为了明确命名空间(这里忽略类文件的加载)

所以在一个 php 文件中:

namespace xyz {
  class a {}
  class b {}
}
namespace abc {
  use xyz\a;
  new a();
  new \xyz\b();
  class b extends a {}
}
namespace {
 use abc\b as aa;
 use xyz\b as bb;
 new bb;
 new aa;
}

命名空间是为了防止名称冲突!

关于php - 在 PHP 中使用与包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43139621/

相关文章:

php - ffmpeg 无法识别的选项在上传时转换为 html 5 视频

PHP 处理 IF 语句中的多个子句

php - 在生产环境中部署发布的最佳实践

php - 为什么 Curl 会比 Web 浏览器慢?

Ruby 嵌套模块作为命名空间

xml - 如何更改此 WSDL 中的 namespace 前缀?

typescript - 将库导入带有命名空间的 typescript 文件的正确步骤/语法

c++ - Visual Studio + CMake 的 GLOB_RECURSE

C++:让 Boost 工作;关于包含路径和链接库的问题

android - 在包含布局上使用边距