我曾经在类定义上面使用了关键字“used”。像这样:
<?php
namespace suites\plugins\content\agpaypal;
use \Codeception\Util\Fixtures;
use \Codeception\Verify;
use \Codeception\Specify;
class agpaypalTest extends \Codeception\Test\Unit
{
protected $tester;
...
但是现在我意识到,我必须将特性指定的行放入类定义中。像这样:
<?php
namespace suites\plugins\content\agpaypal;
use \Codeception\Util\Fixtures;
use \Codeception\Verify;
class agpaypalTest extends \Codeception\Test\Unit
{
use \Codeception\Specify;
protected $tester;
...
我认为这是因为包\ Codeception \ Specify;是一种特质。但我不明白为什么我设置行use \ Codeception \ Specify时不能重用这个特性;在课前定义?
如果有人能指出我的提示或解释向我解释我应该在哪里使用关键词“使用”最好的我会很高兴。
在PHP中,关键字use
用于3种情况:
use
基本上包含一个文件中的类来使用它。有两种方法可以将类文件包含在另一个文件中。最一般的是require
或include
方法。另一种方法是使用作曲家。假设此目录结构
Project
|
|--- Folder A
| |
| |---UserRegistration.php
|
|---Example
|
|--TestUserRegistration.php
在文件夹A中有UserRegistartion.php
,你想使用TestUserRegistration.php
中的代码在UserRegistration.php
它可以是class
,trait
或Interface
方法1。
在TestUserRegisteration.php
你可以include
或require
文件UserRegistartion.php
并使用它
方法2
使用Composer。在UserRegistration.php
中,您将namespace FolderA;
定义为第一行代码。然后像你一样编写代码。所以现在你要在TestUserRegistration.php
中使用这个文件
include vendor/autoload.php;
use FolderA\UserRegistration;
哪一个更好,为什么?
使用composer的方法2是最好的方法。在方法1中,只要您想要包含UserRegistration,就必须找到UserRegistration文件的相对路径。因此,假设有一天您需要更改应用程序将破坏的目录结构,因为您现在提供的相对路径不存在。
但是在方法2中,您始终使用您提供的命名空间\文件名而不是您要使用的位置。因此,即使您更改了您没有的目录结构,也无法获取所有代码并修改路径。它将按原样工作。要了解更多关于如何使用namespace
和composer
的研究。
您无法使用use
关键字导入类。你必须使用include
/ require
声明。即使你使用一些php自动加载器,仍然自动加载器将不得不在内部使用include
或require
。
使用目的关键字:
考虑一个你有两个同名的类的情况;你会发现它很奇怪,但是当你使用大型MVC结构时,会发生这种情况。因此,如果您有两个具有相同名称的类,请将它们放在不同的名称空间中。现在考虑一下你的自动加载器加载两个类(由require
做),你将要使用类的对象。在这种情况下,编译器会混淆哪两个类对象加载。为了帮助编译器做出决定,您可以使用use
语句,以便它可以决定将使用哪一个。