Memo

メモ > 技術 > フレームワーク: Laravel > 前提知識

■前提知識
■Composer PHPの依存性管理ツール 依存ライブラリ郡も含めて、まとめてインストールできる また、composer.json に使っているライブラリが記録される(ファイルが無ければ作成される)
composer require 使いたいライブラリ
もしくは
composer.json に使いたいライブラリを記述して composer install
とコマンドを実行するとインストールされる この場合、自分で一つ一つ依存ライブラリをダウンロードする必要が無い。つまり環境の再現が容易にできる ダウンロードしたファイルは vendor フォルダ内に格納される PHP開発でComposerを使わないなんてありえない!基礎編 - Qiita http://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94 Laravel5のプロジェクトをGitで管理する - Qiita https://qiita.com/zaburo/items/bc448a9fbf2d35194302 php - vendorディレクトリをGit管理下に置かないのは何故? - スタック・オーバーフロー https://ja.stackoverflow.com/questions/23725/vendor%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%... ■オートローディング 名前空間に従って自動的にファイルを読み込む require_once などで明示的にファイルを読み込む必要がない Composerを使うことで簡単に導入できる PHPでクラスをspl_autoload_registerを使ってオートロードする - バカンス駆動開発 http://egapool.hatenablog.com/entry/2013/11/17/195045 PHPのオートロード(autoload) - Qiita http://qiita.com/atwata/items/5ba72d3d881a81227c2a src/Refirio/Greeting/Hello.php
<?php class Hello { function say() { echo 'Hello World!'; } }
sample.php
<?php require_once "src/Refirio/Greeting/Hello.php"; $hello = new Hello(); echo $hello->say();
↓オートロードに対応させる composer.json
{ "autoload": { "psr-4": { "myapp\\": "src/" } } }
Composerでインストール
composer install … composer.json に設定した内容に合わせて vender ディレクトリ内にプログラムが作られる
以下のようにしてオートロードを利用できる src/Refirio/Greeting/Hello.php
<?php namespace myapp\Refirio\Greeting; class Hello { function say() { echo 'Hello World!'; } }
sample.php
<?php require_once "vendor/autoload.php"; $hello = new myapp\Refirio\Greeting\Hello(); echo $hello->say();
↓名前空間のエイリアスを作成
<?php require_once "vendor/autoload.php"; use myapp\Refirio\Greeting\Hello; //use myapp\Refirio\Greeting\Hello as Hello; // クラスに別名を指定する場合 $hello = new Hello(); echo $hello->say();
■デザインパターン 勉強メモ http://refirio.org/memos/study/20161028_design_pattern/slide/ http://refirio.org/page/memo/design_pattern ■trait 限定的な多重継承を行う PHP5.4 の新機能 trait のまとめと実際の利用例 | 株式会社インフィニットループ技術ブログ https://www.infiniteloop.co.jp/blog/2014/08/php54-traits/ PHP5.4以降で導入されたトレイト(trait)というしくみ - ts0818のブログ http://ts0818.hatenablog.com/entry/2015/10/15/183555
<?php trait Facebook { function post($body) { echo 'Facebookに投稿しました:' . $body . "\n"; } } trait Twitter { function post($body) { echo 'Twitterに投稿しました:' . $body . "\n"; } } class Mailer { public function send($body) { echo 'Mailerで送信しました:' . $body . "\n"; } } class SendmailMailer extends Mailer { use Facebook; /* // 同名のメソッドがある場合 use Facebook, Twitter { Facebook::post insteadof Twitter; // instead of ... 代わりに Twitter::post as tweet; // as ... として } */ public function send($body) { echo 'Sendmailで送信しました:' . $body . "\n"; } public function getPath() { return '/usr/sbin/sendmail'; } } $mailer = new SendmailMailer(); $mailer->send('こんにちは!'); $mailer->post('こんにちは!'); //$mailer->tweet('こんにちは!');
■DI DIとは?DIコンテナとは?試してみた(前編)[PHP][DI] - あざらし備忘録。 http://shiro-goma.hatenablog.com/entry/2014/06/22/102236 Dependency Injectionを特定のDIコンテナに頼らず実現する - Qiita http://qiita.com/Hiraku/items/48fbdfca4b63c74494e9 DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita http://qiita.com/ritukiii/items/de30b2d944109521298f DIコンテナの本当の使いどころ | 技術トピックス | ウルシステムズ株式会社 https://www.ulsystems.co.jp/topics/025 DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる - Qiita https://qiita.com/okazuki/items/a0f2fb0a63ca88340ff6 DIコンテナのテスト以外での利点について - Qiita https://qiita.com/crexista/items/606976d941728a90b42b 勉強メモ http://refirio.org/page/memo/di ■リフレクション クラスに関する情報を参照したり、変更したりすることができる PHPでリフレクション : アシアルブログ http://blog.asial.co.jp/751 パラメータとしてタイプヒントされたクラスを取得 http://php.net/manual/ja/reflectionparameter.getclass.php タイプヒントからクラスを取得する例
class Message { } class Hello { function say(Message $message) { } } $reflection = new ReflectionClass('Hello'); $parameters = $reflection->getMethod('say')->getParameters(); echo $parameters[0]->getClass()->getName(); // 「Message」と表示される
■ドメイン駆動設計 厳密にドメイン駆動設計に沿っているわけでは無いようだが、知っておくと理解が進みそう ドメイン駆動設計 http://qiita.com/haazime/items/6119097071149a362f7f Domain駆動開発入門 | キャスレーコンサルティング 技術ブログ http://www.casleyconsulting.co.jp/blog-engineer/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%... おい!なんでその処理をコントローラに書いているんだい? https://zenn.dev/marty_ojiya/articles/ada4528d2b619c ■Mockery 作成前のクラスを、すでに存在するかのようにテストできる 例えば
<?php class SampleExecuter { public function doSomething($checkType, $param) { $factory = new CheckerFactory($checkType); $checker = $factory->create(); if ($checker->checkSomething($param)) { return 'trueが返ったよ'; } else { return 'falseが返ったよ'; } } }
このような SampleExecuter があった場合、このテストは CheckerFactory が完成するまで行うことができない が、モックとなる CheckerFactory を作り、テストできるようにする MockeryとPHPUnitを使う(最低限) - Qiita https://qiita.com/zaburo/items/b559782179565bb1c538 Mockery 0.8.0 日本語ドキュメント https://kore1server.com/202/Mockery+0.8.0+%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%89%E3%82%AD%E3%83%A5%E3%... 「Mockery」を使ってサクッとPHPのテストを書いてみる | アライドアーキテクツ エンジニアブログ http://tech.aainc.co.jp/archives/3918 composerでインストール (「--dev」をつけると通常の「composer install」ではインストールされないものにできる。「composer install --dev」とする。)
cd C:\localhost\home\test\public_html\mockery composer require --dev phpunit/phpunit composer require --dev mockery/mockery
tests\test1.php を作成して以下を入力
<?php require_once 'vendor/autoload.php'; class SampleTest1 extends PHPUnit_Framework_TestCase { public function testSample1() { //Mockを設定 $m = \Mockery::mock('Hoge'); $m->shouldReceive('Hello') ->with('foo') ->andReturn("Hello foo"); //Helloメソッドを実行 $m->Hello('foo'); $this->assertEquals("Hello foo", $m->Hello('foo')); } }
以下のコマンドでテストを実行
vendor\bin\phpunit tests/test1.php PHPUnit 5.7.22 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 85 ms, Memory: 3.25MB OK (1 test, 1 assertion)

Advertisement