2017.5.2
0からはじめるPHP#91【Laravelでの自作クラス利用】
過去ログ漁ったら
0でもできるオブジェクト指向とかいう連載もやってたみたいですが、それも踏まえた上でPHPでもオブジェクト指向やりましょうという話をしよう、ということでこっちのタイトルで書くことにしました。(笑)
さて、
俺のカクテルデータベースに関してですが(笑)、Laravel使って開発することにしたわけですが、いい加減ちゃんとSEらしくオブジェクト指向やりたいわけですね。
一応、オブジェクト指向についてはだいぶ前に勉強して感覚をやーーーーっと掴めた感があるのですが、未だそれを意識して実践して作ったプロダクトってないんですね。
何故かというと、Laravelってデフォルトで自作の外部クラス読み込めないんですね(笑)
フレームワークがどういう構造で動いてるかなんて、僕みたいなぺーぺーにはさすがに分かんないので、あれこれ試行錯誤しては失敗して放置してたんですが、やっと正解らしき記述を見つけたので試してみたいなというわけです。
参考にしたのは
こちらとかですね。
まず最初に、テキトーに
app/lib/Classes.phpとか作ります。
<?php
namespace app\lib;
class Common {
public static function ooo() {
return "あああ";
}
}
ゴミみたいなクラスですね(笑)
最初の名前空間を忘れないようにとのことで。まぁたぶんこれ消したら動かなそうですね(笑)
次にオートローダーへの登録ですかね?
composer.jsonを開き、
autoloadの項目に先程のフォルダを登録します。
"autoload": {
"classmap": [
"database",
"app/lib"// <- 追加
],
"psr-4": {
"App\": "app/"
},
"files": ["app/Http/helper.php"]
},
そして、コンポーサーを実行します。
参考にしたページだとこの部分が抜けてます。試しましたが、一回オートロードしないと認識されません。詳しい仕様は不明ですが、一回実行すると新しく作ったクラスが認識されたので、たぶん必要だと思います。
最後に、
config/app.phpのエイリアスに先程のクラスを追加します。
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
~略~
'Common' => app\lib\Common::class, // <- これを追加
......
間違えやすいですが、クォーテーションは要らないです。
後はこいつの呼び出し方ですね。
use Common;
class IndexController extends Controller
{
public function index(){
var_dump(Common::ooo());
}
}
こんな感じで動きます。
public function index(){
$a= new Common;
var_dump($a->ooo());
}
インスタンス化したければ普通にこうすればいいです。
うむ、イイ感じに課題が解決しましたね。こいつを活かしてオブジェクト指向したプログラムを書きたいところです。