簡體   English   中英

PHP-在另一個名稱空間中使用一個名稱空間

[英]PHP - using a namespace in another namespace

我試圖使用我自己的名稱空間中另一個名稱空間中的某些文件,但是它無法識別Defuse\\Crypto名稱空間中的異常。

我檢查了所有文件,所有內容都完美存儲在我的目錄中。 我也可以毫無例外地包括自動裝帶器。

如何在同一文件中完全使用兩個名稱空間?

這是我的代碼:

namespace Defuse\Crypto;

$path = '/my/path/to/DefuseCrypto/autoloader';
require_once $path;

use \Defuse\Crypto\Crypto;
use \Defuse\Crypto\Exception as Ex;

namespace myNamespace;

class myClass
{
    static function encrypt_key($key)
    {
        try
        {
            $ciphertext = Crypto::encrypt($key, $privateKey);
            return $ciphertext;
        }
        catch (Ex\CryptoTestFailedException $ex)
        {
            return false;
        }
        catch (Ex\CannotPerformOperationException $ex)
        {
            return false;
        }
    }

    static function decrypt_key($key)
    {
        try
        {
            $decryptedKey = Crypto::decrypt($key, $privateKey);
            return $decryptedKey;
        }
        catch (Ex\InvalidCiphertextException $ex)
        {
            return false;
        }
        catch (Ex\CryptoTestFailedException $ex)
        {
            return false;
        }
        catch (Ex\CannotPerformOperationException $ex)
        {
            return false;
        }
    }
}

當然,您可以在類中使用名稱空間。 但是,您從根本開始以\\

嘗試這個:

use Defuse\Crypto\Crypto;
use Defuse\Crypto\Exception as Ex;

包括名稱空間后,即可使用它們。 如果要經常使用命名空間(超過1次),請在頂部包含命名空間。 否則,您可以在需要的地方使用完整路徑。

此外,出於可維護性原因,請使用max。 1個名稱空間行。

更改第一行:

namespace myNamespace;

並刪除第二個名稱空間行!

三個選項:您可以直接指定完全限定(絕對)的名稱空間:

catch (\Defuse\Crypto\Exception\CryptoTestFailedException $ex)

或者,您可以在當前活動的名稱空間中使用相對名稱空間:

catch (Exception\CryptoTestFailedException $ex)

或者,您必須在別名下聲明名稱空間以供內部使用,就像@HenriS一樣。 以上建議:

use Defuse\Crypto\Exception as Ex;
[...]
catch (Ex\CryptoTestFailedException $ex)

通常,沒有什么可以反對在一個文件中使用多個名稱空間,這很常見。 但是我同意@HenriS。 在這里,為例外創建單獨的命名空間不是一個好習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM