[英]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.