名前空間とuse
ステートメントに少し問題があります。
ShapeInterface.php
、Shape.php
、Circle.php
の3つのファイルがあります。
相対パスを使用してこれを実行しようとしているので、これをすべてのクラスに入れました:
namespace Shape;
サークルクラスには次のものがあります。
namespace Shape;
//use Shape;
//use ShapeInterface;
include 'Shape.php';
include 'ShapeInterface.php';
class Circle extends Shape implements ShapeInterface{ ....
include
ステートメントを使用すると、エラーは発生しません。 use
ステートメントを試すと、次のようになります。
致命的エラー:8行目の/Users/shawn/Documents/work/sites/workspace/shape/Circle.phpにクラス「Shape\Shape」が見つかりません
誰かが問題について少しアドバイスをください。
use
operator は、クラス、インターフェース、または他の名前空間の名前にエイリアスを与えるためのものです。ほとんどの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
演算子を autoloading と混同しないでください。クラスは、オートローダーを登録することで(たとえばspl_autoload_register
を使用して)自動ロードされます(include
の必要性がなくなります)。適切なオートローダーの実装を確認するには、 PSR-4 と読みたいかもしれません。
コードを名前空間に並べる必要がある場合は、キーワードnamespace
を使用します。
file1.php
namespace foo\bar;
File2.phpで
$obj = new \foo\bar\myObj();
use
を使用することもできます。 file2に置く場合
use foo\bar as mypath;
ファイル内のどこでもmypath
の代わりにbar
を使用する必要があります。
$obj = new mypath\myObj();
use foo\bar;
の使用は、use foo\bar as bar;
と同じです。