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;
        }
    }
}

三个选项:要么直接指定完全限定(所以绝对)命名空间:

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

或者在当前活动的命名空间中使用相对命名空间:

catch (Exception'CryptoTestFailedException $ex)

或者您必须在别名下声明名称空间以供内部使用,例如@HenriS。如上建议:

use Defuse'Crypto'Exception as Ex;
[...]
catch (Ex'CryptoTestFailedException $ex)
一般来说,没有人反对在一个文件中使用多个名称空间,这是很常见的。但我同意@HenriS的观点。在这里,为异常创建单独的名称空间是而不是的好做法。

当然可以在类中使用名称空间。但是你从根开始,以'

开头

试试这个:

use Defuse'Crypto'Crypto;
use Defuse'Crypto'Exception as Ex;

包含名称空间之后,就可以使用它们了。如果您希望经常使用某个名称空间(多于一次),请将名称空间包含在顶部。否则,您可以在需要的地方使用完整路径。

此外,出于可维护性的考虑,使用max。

把你的第一行改成:

namespace myNamespace;

并删除第二个命名空间行!