namespaces
PHPに関する記事を読みました。しかし、私はそれらが何に使用されているのかわかりませんか?
<?php
namespace MyProject {
// Regular PHP code goes here, anything goes!
function run()
{
echo 'Running from a namespace!';
}
}
PHP.net のマニュアルも読みましたが、よくわかりませんでした。
namespaces
PHPに関する記事を読みました。しかし、私はそれらが何に使用されているのかわかりませんか?
<?php
namespace MyProject {
// Regular PHP code goes here, anything goes!
function run()
{
echo 'Running from a namespace!';
}
}
PHP.net のマニュアルも読みましたが、よくわかりませんでした。
私も苦労しましたが、コンパイラが名前を解決するのを助ける方法と考えてください。したがって、あいまいさはありません。
まったく異なるクラスを作成する 2 人の開発者が、同じ型識別子を持つ場合があります。クラス名は同じかもしれません。名前空間でグループ化すると、コンパイラ/インタープリターがあいまいさを取り除くのに役立ちます。
とnamespace Developer1.CoolClass
はかなり異なりますnamespace Developer2.CoolClass
PHP の世界では、名前空間は、ライブラリやアプリケーションの作成者がクラスや関数などの再利用可能なコード要素を作成するときに遭遇する 2 つの問題を解決するように設計されています。
作成したコードと、内部の PHP クラス/関数/定数またはサードパーティのクラス/関数/定数との間の名前の衝突。最初の問題を軽減するように設計された Extra_Long_Names に別名を付ける (または短縮する) 機能により、ソース コードの読みやすさが向上します。
PHP 名前空間は、関連するクラス、インターフェース、関数、および定数をグループ化する方法を提供します。
名前空間は、パッケージ内の関連するクラスをグループ化する方法です。名前空間を、ファイルを保持するフォルダーと見なすことができます。これにより、名前が同じで異なる (または同じ) ファイルをあいまいさなく両方に含めることができます。
file1.php
<?php
namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo() {}
class foo
{
static function staticmethod() {}
}
?>
file2.php
<?php
namespace Foo\Bar;
include 'file1.php';
const FOO = 2;
function foo() {}
class foo
{
static function staticmethod() {}
}
/* Unqualified name */
foo(); // resolves to function Foo\Bar\foo
foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
echo FOO; // resolves to constant Foo\Bar\FOO
/* Qualified name */
subnamespace\foo(); // resolves to function Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // resolves to class Foo\Bar\subnamespace\foo,
// method staticmethod
echo subnamespace\FOO; // resolves to constant Foo\Bar\subnamespace\FOO
/* Fully qualified name */
\Foo\Bar\foo(); // resolves to function Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod
echo \Foo\Bar\FOO; // resolves to constant Foo\Bar\FOO
?>
名前空間は、ライブラリと「ヘルパー」(関数を含むファイル) の移植性を高めるために、関数とクラス宣言を分離するために使用されます。ライブラリを名前空間に配置することで、クラス名が、ライブラリを使用したい作成者が自分のクラスと呼びたい名前と衝突する可能性を減らすことができます。別々の名前空間にあります。
独自のクラスを作成することを検討してくださいFoo
。他の誰かがプロジェクトの一部も書いており、彼も自分のクラスの 1 つを呼び出していますFoo
。
名前空間はこの問題を解決します。
例:
Namespace MyClasses;
Class Foo
{
}
NameSpace HisClasses;
Class Foo
{
}
$myfoo = new MyClasses\Foo();
$hisfoo = new HisClasses\Foo();