如何以及在何处使用php中的关键字“use”

问题描述 投票:3回答:3

我曾经在类定义上面使用了关键字“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 class namespaces traits codeception
3个回答
6
投票

在PHP中,关键字use用于3种情况:

  1. 作为类名别名 - 只需声明一个类的短名称(必须在类定义之外声明)(manual: Using namespaces: Aliasing/Importing
  2. 向类中添加特征(必须在类定义的内部(顶部)声明)(manual: Traits
  3. 在匿名函数定义中传递函数内的变量(manual: Anonymous functions

3
投票

use基本上包含一个文件中的类来使用它。有两种方法可以将类文件包含在另一个文件中。最一般的是requireinclude方法。另一种方法是使用作曲家。假设此目录结构

Project
  |
  |--- Folder A
  |      |
  |      |---UserRegistration.php
  |
  |---Example
         |
         |--TestUserRegistration.php    

在文件夹A中有UserRegistartion.php,你想使用TestUserRegistration.php中的代码在UserRegistration.php它可以是classtraitInterface

方法1。

TestUserRegisteration.php你可以includerequire文件UserRegistartion.php 并使用它

方法2

使用Composer。在UserRegistration.php中,您将namespace FolderA;定义为第一行代码。然后像你一样编写代码。所以现在你要在TestUserRegistration.php中使用这个文件

include vendor/autoload.php;
use FolderA\UserRegistration;

哪一个更好,为什么?

使用composer的方法2是最好的方法。在方法1中,只要您想要包含UserRegistration,就必须找到UserRegistration文件的相对路径。因此,假设有一天您需要更改应用程序将破坏的目录结构,因为您现在提供的相对路径不存在。

但是在方法2中,您始终使用您提供的命名空间\文件名而不是您要使用的位置。因此,即使您更改了您没有的目录结构,也无法获取所有代码并修改路径。它将按原样工作。要了解更多关于如何使用namespacecomposer的研究。


2
投票

您无法使用use关键字导入类。你必须使用include / require声明。即使你使用一些php自动加载器,仍然自动加载器将不得不在内部使用includerequire

使用目的关键字:

考虑一个你有两个同名的类的情况;你会发现它很奇怪,但是当你使用大型MVC结构时,会发生这种情况。因此,如果您有两个具有相同名称的类,请将它们放在不同的名称空间中。现在考虑一下你的自动加载器加载两个类(由require做),你将要使用类的对象。在这种情况下,编译器会混淆哪两个类对象加载。为了帮助编译器做出决定,您可以使用use语句,以便它可以决定将使用哪一个。

在这里参考这个How does the keyword 'use' work

© www.soinside.com 2019 - 2024. All rights reserved.