2016-11-22 3 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とmicrogrid ../include/classesにあります。ルートディレクトリと私はどのように私は私のマイクログリッドクラスを使用することができます戻って行くことができますか? – nick

+0

答えた@nick –

2

PHPは、箱から出してクラスオートローダーを提供ないを行います。

PHPには多くのオートローダーがあり、最も一般的なオートローダー標準は多くのフレームワークとアプリケーションで使用されているPSR-4です。

オートローダーを使用していない場合は、使用する前にすべてのクラスファイル(および再帰的な依存関係)が必要です。

Azureは、Composer AutoloaderとPSR-4を使用します。

はその後、彼らが開始しない限り

+0

私は作曲家を使用していますが、その行を含めるのを忘れました。インポートについてはどういう意味ですか? – nick

+0

'Some Some \ Class \ Namespace \ ClassName'はimport文です。 どこでもMicroGridクラスをインポートしていません –

+0

また、私はazure php sdkで 'MicroGrid'と呼ばれるファイルが見つかりませんでした。それがクラス名だと確信していますか? –

1

基本的に名前空間のyグループを使用私たちのクラスは一緒に。あなたの名前空間の外に何かを明示的に使用することで使用することができます。私はこれと「アプリケーション」という名前空間内の他のクラスが、私は雄弁(「を照らし\データベースの名前空間を持つ雄弁クラスによって提供される「モデル」を使用したい「グループ」だ。この場合

namespace App; 

use Illuminate\Database\Eloquent\Model; 

\ Eloquent ')を使用します。

'Microgrid'が現在の名前空間の一部でない場合は、その名前空間を明示的に 'use'ステートメントに追加する必要があります。

関連する問題