1. ホーム
  2. php

[解決済み] PHPの名前空間と "use"

2022-03-08 16:48:02

質問

名前空間について少し困っています。 use ステートメントを使用します。

3つのファイルを持っています。 ShapeInterface.php , Shape.phpCircle.php .

私は相対パスを使ってこれを行おうとしているので、すべてのクラスにこれを入れました。

namespace Shape; 

私のサークルクラスでは、次のようにしています。

namespace Shape;
//use Shape;
//use ShapeInterface;

include 'Shape.php';
include 'ShapeInterface.php';    

class Circle extends Shape implements ShapeInterface{ ....

もし、私が include ステートメントを使用しても、エラーは発生しません。もし私が use ステートメントが表示されます。

致命的なエラーです。Class 'ShapeShape' not found in /Users/shawn/Documents/work/sites/workspace/shape/Circle.php on line 8

どなたか、この問題について少し指導していただけませんか?

どのように解決するのですか?

その use 演算子 は、クラスやインターフェイス、その他の名前空間の名前に別名を付けるためのものです。ほとんどの場合 use 文は、短縮したい名前空間やクラスを参照しています。

use My\Full\Namespace;

とは等価である。

use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo

もし use 演算子がクラス名やインターフェース名と一緒に使われている場合、以下のような使い方があります。

// after this, "new DifferentName();" would instantiate a My\Full\Classname
use My\Full\Classname as DifferentName;

// global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent
use ArrayObject;

use 演算子と混同しないでください。 オートローディング . クラスはオートロードされます。 include で)オートローダを登録することです。 spl_autoload_register ). を読みたいと思うかもしれません。 PSR-4 を使うと、適切なオートローダーの実装を見ることができます。