在PHP中使用vs-Include

在PHP中使用vs-Include,php,namespaces,include,phpunit,Php,Namespaces,Include,Phpunit,我正试图了解PHP名称空间并使用PHPUnit进行测试 当我在Windows上的命令行中运行phpunit test.php时,来自Codewars的这些测试通过: <?php require 'solution.php'; use PHPUnit\Framework\TestCase; class myTests extends TestCase { public function testExamples() { $this->assertEquals(pa

我正试图了解PHP名称空间并使用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);
  }
}

使用不包含任何内容。它只是将指定的名称空间(或类)导入到当前作用域,您需要设置自动加载程序,以便包含定义名称空间的文件。
在此处阅读有关自动加载的更多信息:

include语句包含并计算指定的文件

例如:

<?php

$color = 'green';
$fruit = 'apple';

?>

test.php
<?php

echo "A $color $fruit"; // A

include 'vars.php';

echo "A $color $fruit"; // A green apple

?>

test.php
以清除名称空间(忽略此处类文件的加载)

因此,在一个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;
}

命名空间用于防止名称冲突

正如@deceze所说,PHPUnit为您完成了这项工作,但不要认为使用时不需要包含该文件

注意结构:


PRO-TIP:打开phpunit文件,以便更好地理解。

当类被放在类定义的顶部时,use通常可用于缩短类名称。但是当类定义中出现use时,它意味着包含一个特征

PHP中没有
Use vs Include
如果你想以正确的方式使用
Use
,你必须使用
autoloader
加载类。而
Use
用于在当前脚本中获取速记。这与包含无关。您还可以执行
类myTests extensed\PHPUnit\Framework\TestCase{
您通过
phpunit
运行该文件,该文件已经加载了所有相关的phpunit文件。
use
没有加载该文件,
phpunit
加载了。
有人能解释一下我缺少了什么吗?
@deceze切中要害。通过
phpunit
运行的脚本与
php
中的脚本不一样工作。“将指定的命名空间导入到当前作用域”-它甚至不这样做。它所做的只是建立一个别名,这是一种可以在代码中使用的缩写。仅此而已。