PHPにおいて、名前空間
とオートロード
の仕組みは開発効率に大きく影響するということで、実際にこれらを使って簡単にコードを書いてみようと思います。
コードを書いていく
composer
を使うには、composer.json
という設定ファイルをあらかじめ準備しておく必要があります。
今回はターミナルから作成しようと思うので、composer_practice
というフォルダを用意して、その中で以下のコマンドを実行します。
composer init
コマンド実行後にエディタに移動すると、フォルダの中にcomposer.json
というファイルが生成されています。
{
"name": " ~ /composer_practice",
"authors": [
{
"name": " ~ ",
"email": " ~ "
}
],
"require": {}
}
このファイルを、オートロードができるように書き換えます。
{
"autoload": {
"psr-4": {
"App\\" : "app/" //appが実際のフォルダ、Appがnamespace
}
}
}
app
としたので、composer_practice
フォルダ内にapp
というフォルダを作成すれば、そのフォルダからがオートロードの対象になり、名前空間としてはApp
からスタートします。
ファイルを作成したら、ターミナルで以下のコマンドを実行してcomposerをインストールします
composer install
実行後、composer_practice
フォルダ内にvendor
フォルダが新しく生成されていて、その中にオートロードファイルがあります。composer.json
で設定した内容に従って、vendor
フォルダの中がインストールされるという訳ですね。
次に、app
フォルダ内にModels
フォルダとControllers
フォルダを作成して、Models
フォルダ内にはTestModel.php
ファイルを、Controllers
フォルダ内にはTestController.php
ファイルを作成します。
そして、それらのファイルを呼び出すためのcall.php
ファイルも準備します。
composer_practice
├ composer.json
├ composer.lock
├ vendor
├ call.php
└ app
├ Controllers
│ └ TestController.php
└ Models
└ TestModel.php
まずTestModel.php
にコードを書いていきます。
<?php
namespace App\Models;
class TestModel {
private $message = 'hello world';
public function getHello() {
return $this->message;
}
}
名前空間はフォルダと同じような構成になります。
それから、クラスの名前をファイル名と同じにする必要があります。なので1ファイルに対して1クラス
という関係になります。
次にTestController.php
です。
<?php
namespace App\Controllers;
use App\Models\TestModel;
class TestController {
public function run() {
$model = new TestModel;
echo $model->getHello();
}
}
use
キーワードを使い、use App\Models\TestModel;
と記述することで、クラスをインポートしています。
最後にcall.php
です。
<?php
require_once __DIR__ . '/vendor/autoload.php';
use App\Controllers\TestController;
$app = new TestController;
$app->run();
__DIR__
と記述すると、この定数が呼び出されたファイルがあるディレクトリのフルパスを返してくれます。
実行結果は以下です。しっかり表示されました。
hello world