我曾经在类定义上面使用关键字“use”。像这样:
<?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; 在课程定义之前?
如果有人能指出我的提示或解释,我会很高兴向我解释我应该在哪里使用关键词“使用”最好的。
答案 0 :(得分:6)
在PHP中,关键字use
用于3种情况:
答案 1 :(得分:3)
use
基本上包含文件中的一个类来使用它。
有两种方法可以将类文件包含在另一个文件中。
最常见的是require
或include
方法。另一种方法是使用作曲家。假设此目录结构
Project
|
|--- Folder A
| |
| |---UserRegistration.php
|
|---Example
|
|--TestUserRegistration.php
在文件夹A中有UserRegistartion.php
,您希望使用TestUserRegistration.php
中的代码UserRegistration.php
它可以是class
,trait
或{{1 }}
方法1。
在Interface
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
的更多研究。
答案 2 :(得分:2)
您无法使用include
关键字导入课程。您必须使用require
/ include
声明。即使您使用某些php自动加载器,仍然自动加载器必须在内部使用require
或require
。
使用关键字的目的:
考虑一个你有两个同名的类的情况;你会发现它很奇怪,但是当你使用大型MVC结构时,会发生这种情况。因此,如果您有两个具有相同名称的类,请将它们放在不同的名称空间中。现在考虑一下你的自动加载器何时加载两个类(由use
完成),并且你将要使用类的对象。在这种情况下,编译器会混淆哪两个类对象加载。为了帮助编译器做出决定,您可以使用{{1}}语句,以便它可以决定将使用哪一个。