いままで90回ぐらい
0から始めるPHPと題した記事を書いてきたと思うのですが、そろそろ僕が放置してきた課題に関して向き合う時がやってきたのではないかなと思います。
それも
オブジェクト指向でございます。
僕これ大嫌いです。わけわかんないもん。(笑)
まぁ、でも有用なのは理解してますし、扱えたらコードすっきりするんだろうなぁってことぐらいは理解してるのでそれを学習しましょうと。
このオブジェクト指向の難しいところって、別に使い方とかじゃないんですよ。
どう設計するかが難しいと僕は感じています。
そりゃ、簡単な例だったらわかりますけど、僕がいまから作り始めてるようなアプリケーションだとどういうクラス分けになるのか???とか正直ピンと来ないのです。
というわけで、それを記事として書くことで学習しましょうと。そういう目論見でございます。
まず、オブジェクト指向のいろはを吸収するため
こんなページを見てました。
悪いプログラム例とか参照しながらなので長いのですが、割とわかりやすかったです。
まぁ要するに
全部クラス化しちまえってことですね(は???)
いやそんな暴論を言うなよって感じなんですけど、コツは掴みました。
そう、実体とかややこしいことを考えずに、要するに切り分けられる仕事は切り分けてしまえってことっすよね!?!?!?
正確には違うんですけどね
たぶん、オブジェクトが値を持つ、という意識がよくないんですね。
オブジェクトに於いてたぶん
一番重要なのはコンストラクタです。受け取った数値でオブジェクト内の変数を定義し、それを吐き出す機械なのです。はい。
まぁその話は次回です。今回は
外部ファイルにクラスを定義するということをやってみたいと思います。
つまり、具体的なロジックはコントローラーに記述して、それを支えるクラス群は別のファイルにしたいということですね。
まぁそんなのは他にphpファイルを作ってrequireすればいいんだろと思えば
実はそうもいかないのです。
ここでキーとなるのが
名前空間というロジックの存在でしてね。
これに関しては
正直よくわからないんですが、どこかで例えられていたのは
「名字」です。
つまり、同じ「太郎」でも「鈴木さんとこの太郎」と「田中さんとこの太郎」って違うよねみたいな。その太郎の区別をつけるために名前空間というのが持ち出されているわけです。
まぁこれはアレですかね、関数名の衝突とかを避けるための技法なんですかね。個人開発ではあんまり必要ないものかな。
<?php namespace App\Http\Controllers;
use DB;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
require '../app/Http/Controllers/Class.php';//←これを今回追加したい
class hogehogeController extends Controller {
...以下略
この
Class.phpってのを外部ファイルとして取り込みたいというわけです。ファイル名は複数形にすべきだったかもですね。まぁどうでもいいですけど笑
じゃあどうすればいいのかっていうと、同じ苗字にしてしまえばよいわけですね。
<?php
namespace App\Http\Controllers;//←これを書く!
class SimpleClassx
{
// プロパティの宣言
public $var = 'a default value';
// メソッドの宣言
public function displayVar() {
echo $this->var;
}
}
これでOKです。これでこのファイルはApp\Http\Controllersという名前空間に属したことになります。
つまりコントローラー内部ではこのClass.phpは使いたい放題ってわけですね。ビューの方からは使えなさそうだなぁとは思うんですけど、ビューは本来そんな関数とか入れ込まずに済むようにしておけって話ですしまぁいいんじゃないでしょうか。ビューでも使いたかったらクラス記述部分をincludeすればいいんだろうか。んー、無理そうかな。(笑)
プログラミングの世界ではこんなたた一行の話でハマったりすることが往々にしてあるので、こんな感じにちょっとずつオブジェクト指向ができるようにしたいなぁって思います。
まぁバイトも当然のように落ちましたしね。4ヶ月だけしか無理だししょうがないね。(笑)