PHPのOOPにおけるuseコマンドと名前空間
次のDataクラスがあるとします:
<?php
namespace \Core\Admin;
class Data
{
public function __construct($num)
{
}
}
?>
また、Pageクラスがあり、その内部でDataクラスのオブジェクトを作成しているとします:
<?php
namespace Users;
class Page
{
public function __construct()
{
$data1 = new \Core\Admin\Data('1');
$data2 = new \Core\Admin\Data('2');
}
}
?>
ご覧の通り、両方のクラスは完全に異なる名前空間に存在するため、前のレッスンで行ったようにDataクラスの呼び出しを簡略化することはできません。しかし、これらの呼び出しは非常に長く不便です。なぜなら、Dataクラスを呼び出すたびに、その長い名前空間を指定する必要があるからです。
このような問題を解決するために、特別なコマンドuseが存在します。このコマンドを使用して、完全修飾名でクラスを一度だけインポートすれば、その後はクラス名だけでそのクラスを参照できるようになります。以下の例を見てください:
<?php
namespace Users;
use \Core\Admin\Data; // クラスをインポート
class Page extends Controller
{
public function __construct()
{
$data1 = new Data('1'); // 単純な名前で呼び出し
$data2 = new Data('2'); // 単純な名前で呼び出し
}
}
?>
useを使用して以下のコードを簡略化してください:
<?php
namespace Project;
class Test
{
public function __construct()
{
// 1つのクラスの3つのオブジェクトを作成:
$data1 = new \Core\Users\Data('user1');
$data2 = new \Core\Users\Data('user3');
$data3 = new \Core\Users\Data('user3');
}
}
?>
以下のクラスが与えられています:
<?php
namespace Core\Admin;
class Controller
{
}
?>
<?php
namespace Users;
class Page extends \Core\Admin\Controller
{
}
?>
useコマンドを適用して、クラスの継承コードを簡略化してください。