2016-11-22 45 views
2

我想使用Azure存储的PHP,设置步骤是包括名称空间,包括作曲家自动加载,然后使用天蓝色的类,所以我有以下。然而,更进一步,我使用Microgrid类,并且因为命名空间而未找到它,它位于不同的目录中。我怎样才能使用不属于该命名空间的其他类?另外,指定名称空间路径的正确方法是什么?它位于相对于该页面的不同目录中,而我正在使用的目录不在根目录下,我应该从根开始吗?不理解php命名空间,我怎样才能从另一个类调用函数?

namespace MicrosoftAzure\Storage; 
use \MicrosoftAzure\Storage\Common\ServicesBuilder; 
use \MicrosoftAzure\Storage\Blob\Models\CreateContainerOptions; 
use \MicrosoftAzure\Storage\Blob\Models\PublicAccessType; 
use \MicrosoftAzure\Storage\Common\ServiceException; 

require_once '/var/www/html/vendor/autoload.php'; 


$action = MicroGrid::GetParameter('action'); 
+2

'use \ namespace \ where \ microgrid \ located \ MicroGrid;'? – Wizard

+0

如果你的类没有命名空间,你可以尝试使用:'$ action = \ MicroGrid :: GetParameter('action');' – Wizard

+0

当你声明命名空间是从根还是相对的? – nick

回答

3

类名被认为是相对于当前的命名空间\

这意味着在MicrosoftAzure\Storage命名空间中,您可以使用类的相对名称空间。

如果你想从不同的命名空间,你应该叫完全合格的名称像

$action = \MicrosoftAzure\WhereEver\MicroGrid::GetParameter('action'); 

或使用该名称空间或独特的类完全限定名调用类

use \MicrosoftAzure\WhereEver; 

use \MicrosoftAzure\WhereEver\MicroGrid; 

则:

$action = MicroGrid::GetParameter('action'); 

编辑要清楚

命名空间可以使我们避免命名冲突,并造成别名避免命名冲突长 名。

这取决于你的自动加载机一个简单的例子,我创建一个新项目,使这个自动加载磁带机在位于根目录

function __autoload($className){ 
    //if it's a full name with windows style slashes correct the path 
    $file_name = str_replace('\\', '/', $className); 
    require_once("vender/src/".$file_name.".php"); 
} 

当我打电话的index.php $date = new \App\Utility\Date();自动加载磁带机将需要这个文件:

verdor/src/App/Utility/Date.php 

Date.php我用这个名字空间的命名空间App\Utility;

+0

好吧,我不明白应该如何声明名称空间,我的天蓝色图书馆位于../vendor/MSAzure/Storage和微型网格在../include/classes中,我应该声明来自根目录,我怎么回去,所以我可以使用我的微电网类? – nick

+0

回答编辑@nick –

2

PHP确实提供了一类自动加载机开箱。

PHP有很多自动加载器,最常见的自动加载器标准是PSR-4,许多框架和应用程序都使用它。

如果您不使用自动加载器,则在使用它之前,您应该要求每个类文件(以及递归依赖关系)。

Azure使用Composer Autoloader和PSR-4。

你应该在你的项目中使用作曲自动装弹机,然后从右侧的命名空间导入类(您未导入它在你的示例代码),除非他们开始用

+0

我正在使用作曲家,忘了包括那一行,你是什么意思关于进口? – nick

+0

'使用Some \ Class \ Namespace \ ClassName'是一个导入语句。 你并没有在任何地方导入MicroGrid类 –

+0

我还没有在azure php sdk上找到任何名为'MicroGrid'的文件。你确定这是班级名称吗? –

1

基本上是一个命名空间基Y我们一起上课。您可以通过明确使用它来使用名称空间外的某些内容,例如

namespace App; 

use Illuminate\Database\Eloquent\Model; 

在这种情况下我“分组”这和其他类在一个名为“应用程序”命名空间,但我想使用佞(有“照亮\数据库的命名空间中的类雄辩提供“样板” \ Eloquent')。

如果'Microgrid'不是您当前命名空间的一部分,您需要在'use'语句中明确添加它的命名空间。

相关问题