のぐそんブログ

暗いおじさんがシコシコ書くブログです。

PHPの名前空間メモ

名前空間とはクラスや関数などの名前の衝突を防ぐために「名前の空間」を利用して、それぞれグループ化することがあります。

とにかくクラスなどを衝突させない為の仕組みです。

以下が名前空間の簡単な例です。

````php namespace Animal\Bird;

class Pigeon

{ public function eat(){ echo 'もぐもぐ'; } } ````

require_once

<?php

require_once 'Animal\Bird\Pigeon.php';

$obj = new Animal\Bird\Pigeon();
$obj->eat(); //もぐもぐ

名前空間の付け方

namespace 名前空間;

階層化させる場合は\で区切ります。

namespace 名前空間\サブ\サブ

名前空間は、Class、関数、定数に影響します。

<?php

namespace Animal\Bird;

class Pigeon

{
    public function eat(){
        echo 'もぐもぐ';
    }
}

function fly(){
    echo 'バタバタ';
}

const name = '鳩';
<?php

require_once 'Animal\Bird\Pigeon.php';

$obj = new Animal\Bird\Pigeon();
$obj->eat(); // もぐもぐ

Animal\Bird\fly(); // バタバタ
echo Animal\Bird\name; //鳩

名前空間の参照方法

同じ名前空間

同じ名前空間の場合は、名前空間の指定を省略できます。 絶亭指定もできます。

<?php

namespace Animal\Bird;

class Pigeon

{
    public function eat(){
        echo 'もぐもぐ';
    }
}

$pigeon = new Pigeon();

$pigeon->eat();

$pigeon = new \Animal\Bird\Pigeon();

$pigeon->eat();

別な名前空間

絶対値で指定する必要があります。

<?php

namespace Animal\Mammalian;

require_once 'Animal\Bird\Pigeon.php';

$obj = new \Animal\Bird\Pigeon();
$obj->eat();

グローバルな空間

グローバルな空間からは、相対指定することができます。

<?php

require_once 'Animal\Bird\Pigeon.php';

$obj = new Animal\Bird\Pigeon();
$obj->eat();

useキーワードとasキーワード

useキーワードとasキーワードを利用することで、名前空間エイリアスを作成することができます。

use 名前空間 as エイリアス名

以下の名前空有感のエイリアスを作成します。

<?php

namespace Animal\Bird\Japan;

class Pigeon

{
    public function eat(){
        echo 'もぐもぐ';
    }
}

function fly(){
    echo 'バタバタ';
}

const name = '鳩';

名前空間を全て定義する。

   <?php

    require_once 'Pigeon.php';

    use Animal\Bird\Japan as Hoge;

    $obj = new Hoge\Pigeon();
    $obj->eat(); // もぐもぐ

名前空間の一部を定義する。

    <?php

    require_once 'MyClass.php';

    use Animal\Bird as Hoge;

    $obj = new Hoge\Japan\Pigeon();
    $obj->eat();// もぐもぐ

名前空間をインポート。

    <?php

    require_once 'MyClass.php';

    use Animal\Bird\Japan; // Animal\Bird\Japan as Japanと同じ

    $obj = new Japan\Pigeon();
    $obj->eat();

クラス名を指定してインポートすることもできます。

    <?php

    require_once 'MyClass.php';

    use Animal\Bird\Japan\Pigeon;

    $obj = new Pigeon();
    $obj->eat();// もぐもぐ

関数をインポートする場合は...

<?php

require_once 'MyClass.php';

use function Animal\Bird\Japan\fly;

echo fly();

定数をインポートする場合は...

<?php

require_once 'MyClass.php';

use const Animal\Bird\Japan\name;

echo name; //鳩

名前空間を変数にいれて使う場合

\エスケープされる場合は\\のようにする必要があります。

<?php

require_once 'MyClass.php';

$class_name = "Animal\Bird\Japan\Pigeon";

$obj = new $class_name();
$obj->eat(); // もぐもぐ