我应该如何以及在何处使用 php 中的关键字 "use"
How and where should I use the keyword "use" in php
我通常在class 定义之上使用关键字"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;
...
但现在我意识到,我必须将特征指定行放入 class 定义中。像这样:
<?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;是一种特质。但是我不明白为什么我在设置线路时不能重用这个特性
使用 \Codeception\Specify;
在 class 定义之前?
如果有人能给我提示或解释,向我解释我应该在哪里使用关键字 "use" 最好,我会很高兴。
您无法使用 use
关键字导入 class。您必须使用 include
/require
语句。即使你使用一些 php 自动加载器,自动加载器仍然必须在内部使用 include
或 require
。
使用关键字的目的:
考虑这样一种情况,您有两个 class 同名;您会觉得很奇怪,但是当您使用大型 MVC 结构时,就会发生这种情况。因此,如果您有两个同名的 classes,请将它们放在不同的名称空间中。现在考虑当你的自动加载器正在加载两个 classes(由 require
执行)时,你将要使用 class 的对象。在这种情况下,编译器会混淆要在两个对象中加载哪个 class 对象。为了帮助编译器做出决定,您可以使用 use
语句,以便它可以决定将使用哪个。
这里参考这个
How does the keyword 'use' work
在PHP中,关键字use
被用在3种情况下:
- As class 名称别名 - 简单地声明 class 的简称(必须在 class 定义的 外部 声明)
(manual: Using namespaces: Aliasing/Importing )
- 向 class 添加特征(必须在 class 定义的 内部 (顶部)声明
(manual: Traits)
- 在匿名函数定义中传递函数内部变量
(manual: Anonymous functions)
use
基本上是在文件中包含一个 class 来使用它。
有两种方法可以将 class 文件包含在另一个文件中。
最通用的是 require
或 include
方法。另一种方法是使用作曲家。假设这个目录结构
Project
|
|--- Folder A
| |
| |---UserRegistration.php
|
|---Example
|
|--TestUserRegistration.php
文件夹A中有UserRegistartion.php
,你想使用TestUserRegistration.php
中的代码在UserRegistration.php
中可以是class
、trait
或Interface
方法一.
在 TestUserRegisteration.php
中,您可以 include
或 require
文件 UserRegistartion.php
并使用它
方法二
使用作曲家。在 UserRegistration.php
中,您将 namespace FolderA;
定义为第一行代码。然后像你一样写你的代码。所以现在你想在TestUserRegistration.php
中使用这个文件
include vendor/autoload.php;
use FolderA\UserRegistration;
哪个更好,为什么?
方法 2 使用 composer 是最好的方法。在方法 1 中,无论您要包含 UserRegistration 的什么地方,都必须找到 UserRegistration 文件的相对路径。因此,假设有一天您需要更改您的应用程序的目录结构,因为您提供的相对路径现在不存在。
但是在方法2中你总是使用你提供的命名空间\文件名而不是你想使用的地方。因此,即使您更改了目录结构,也不必获取所有代码并修改路径。它会像以前一样工作。
要了解更多有关如何使用 namespace
和 composer
.
的研究
我通常在class 定义之上使用关键字"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;
...
但现在我意识到,我必须将特征指定行放入 class 定义中。像这样:
<?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;是一种特质。但是我不明白为什么我在设置线路时不能重用这个特性 使用 \Codeception\Specify; 在 class 定义之前?
如果有人能给我提示或解释,向我解释我应该在哪里使用关键字 "use" 最好,我会很高兴。
您无法使用 use
关键字导入 class。您必须使用 include
/require
语句。即使你使用一些 php 自动加载器,自动加载器仍然必须在内部使用 include
或 require
。
使用关键字的目的:
考虑这样一种情况,您有两个 class 同名;您会觉得很奇怪,但是当您使用大型 MVC 结构时,就会发生这种情况。因此,如果您有两个同名的 classes,请将它们放在不同的名称空间中。现在考虑当你的自动加载器正在加载两个 classes(由 require
执行)时,你将要使用 class 的对象。在这种情况下,编译器会混淆要在两个对象中加载哪个 class 对象。为了帮助编译器做出决定,您可以使用 use
语句,以便它可以决定将使用哪个。
这里参考这个 How does the keyword 'use' work
在PHP中,关键字use
被用在3种情况下:
- As class 名称别名 - 简单地声明 class 的简称(必须在 class 定义的 外部 声明) (manual: Using namespaces: Aliasing/Importing )
- 向 class 添加特征(必须在 class 定义的 内部 (顶部)声明 (manual: Traits)
- 在匿名函数定义中传递函数内部变量 (manual: Anonymous functions)
use
基本上是在文件中包含一个 class 来使用它。
有两种方法可以将 class 文件包含在另一个文件中。
最通用的是 require
或 include
方法。另一种方法是使用作曲家。假设这个目录结构
Project
|
|--- Folder A
| |
| |---UserRegistration.php
|
|---Example
|
|--TestUserRegistration.php
文件夹A中有UserRegistartion.php
,你想使用TestUserRegistration.php
中的代码在UserRegistration.php
中可以是class
、trait
或Interface
方法一.
在 TestUserRegisteration.php
中,您可以 include
或 require
文件 UserRegistartion.php
并使用它
方法二
使用作曲家。在 UserRegistration.php
中,您将 namespace FolderA;
定义为第一行代码。然后像你一样写你的代码。所以现在你想在TestUserRegistration.php
中使用这个文件
include vendor/autoload.php;
use FolderA\UserRegistration;
哪个更好,为什么?
方法 2 使用 composer 是最好的方法。在方法 1 中,无论您要包含 UserRegistration 的什么地方,都必须找到 UserRegistration 文件的相对路径。因此,假设有一天您需要更改您的应用程序的目录结构,因为您提供的相对路径现在不存在。
但是在方法2中你总是使用你提供的命名空间\文件名而不是你想使用的地方。因此,即使您更改了目录结构,也不必获取所有代码并修改路径。它会像以前一样工作。
要了解更多有关如何使用 namespace
和 composer
.