- 投稿日:2019-04-30T21:14:59+09:00
php-master-changes 2019-04-29
今日はストリームの TLS 1.3 サポートの追加、ビルドシステムのリファクタリング、pdo_mysql のテストの修正、不要コードの削除、typo の修正、CURLFile にストリームのサポートを追加する修正、テストの追加、odbc の不足していた初期化の追加、soap で SEGV が起きる場合がある問題の修正、ドキュメントの更新、imageantialias($image, false) が機能していなかった問題の修正があった!
2019-04-29
codarrenvelvindron: Added tls 1.3 support for PHP
- https://github.com/php/php-src/commit/5c05f5e6d3d31a03c152fe90697bdc3e33193ced
- ext/openssl で、 ストリームの TLS 1.3 のサポートを追加
bukka: Fix tests and logic for TLS 1.3
- https://github.com/php/php-src/commit/c2e9c71e36c6e728ca0ada41fd14606a10791e9e
- ext/openssl で、TLS 1.3 用の実装とテストを修正
bukka: Enable TLS 1.3 by default
- https://github.com/php/php-src/commit/3c056a9e75c75def254b841ebe217256a01b5fc8
- ext/openssl で、TLS 1.3 をデフォルト有効化
bukka: Update NEWS with added TLS 1.3 info
- https://github.com/php/php-src/commit/78bed33862f361a0da96d4d2257ab8725055720b
- [7.4~]
- TLS 1.3 のサポート追加について NEWS に追記
petk: Automatically remove aclocal.m4 if present
- https://github.com/php/php-src/commit/f9db357623434e8583a22553d26aeaa375b97e05
- [7.4~]
- ビルドシステムで、configure や phpize の際に aclocal.m4 を自動で削除するよう修正
- 先日作らないようにしたのが入り込むケースが(古いリビジョンでビルドした後とかに)無くもないので
petk: Enhance the buildconf force option
- https://github.com/php/php-src/commit/76df951eb5a1f84956ffafebf6f88768d63623d8
- [7.4~]
- ビルドシステムで、buildconf の --force を改善
- configure を必ず再生成するようになり、-f も受け付けるようになった
cmb69: Make MySQLPDOTest::extractVersion() more liberal
- https://github.com/php/php-src/commit/fc9cdb723bcd02dfdb83962ca1eda57ec4c10296
- [7.2~]
- ext/pdo_mysql で、テスト用の MySQLPDOTest::extractVersion() の改善
- MySQL/MariaDB のバージョン文字列でより広い範囲を受け付けるようになった、かな
petk: Remove unused TSRM/readdir.h header
- https://github.com/php/php-src/commit/b931dacc888ed59ccae6598338fe604030c251d6
- [7.4~]
- 使われていない TSRM/readdir.h を削除
petk: Simplify checking of *nix build tools
- https://github.com/php/php-src/commit/c79eb107a0f5f4de085b50df5990842bc8202325
- [7.4~]
- ビルドシステムのリファクタリング
- buildmk.stamp を生成しないようにし、build/buildcheck.sh を buildconf に統合
cmb69: Fix tests
- https://github.com/php/php-src/commit/9bf11045db09d87020c66c21e0a4df30f63c415d
- [7.2~]
- ext/pdo_mysql で、テストの修正
nikic: Fix typo in TRY_ASSIGN macro name
- https://github.com/php/php-src/commit/22e9a5e0c382b6accefe809bf59ba08738427593
- [7.4~]
- typo の修正、FASLE ってなんやねん
cmb69: Extend CURLFile to support streams
- https://github.com/php/php-src/commit/c68dc6b5e37e74d89e0a387079139c054c8faa81
- [7.4~]
- ext/curl で、CURLFile にストリームのサポートを追加
lcjury: Adds json_encode test for unpacked arrays
- https://github.com/php/php-src/commit/c79d5b86e005655d10a41d72ff61c33387e88e09
- [7.4~]
- ext/json で、json_encode() のテストを追加
staabm: fixed typo
- https://github.com/php/php-src/commit/1db95f8e4674213c24cd6467b83e4170eedf7851
- ext/opcache で、FASLE の修正
cmb69: Properly initialize out parameter
- https://github.com/php/php-src/commit/71e9013bab22585d47f1f8c02b4c7d93b43298f4
- [7.4~]
- ext/odbc で、結果出力用のパラメータを適切に初期化するよう修正
nikic: Fixed bug #77945
- https://github.com/php/php-src/commit/5da0579259aab958093ca473cb2cc9dff9fd7813
- [7.2~]
- ext/soap で、SoapClient を WSDL_CACHE_BOTH で構築する際に SEGV が起きる場合がある問題の修正
hughmcmaster: Always use pkg-config from the host architecture
- https://github.com/php/php-src/commit/c9ee822bb614e27b5afdff5c951ac3939377a7c9
- ビルドシステムで、AC_PATH_PROG による pkg-config の検出をやめた
hughmcmaster: Use PKG_CHECK_MODULES to detect the libsodium library
- https://github.com/php/php-src/commit/4bce02898dfaccdd2044bf833e07d30f54590fc9
- ビルドシステムで、PKG_CHECK_MODULES を libsodium の検出に使うよう修正
hughmcmaster: Use PKG_CHECK_MODULES to detect the zip library
- https://github.com/php/php-src/commit/a7b5b341b3b3eaea878570b3bbf75f1c069a13e6
- ビルドシステムで、PKG_CHECK_MODULES を zip ライブラリの検出に使うよう修正
nikic: Add UPGRADING entries
- https://github.com/php/php-src/commit/55ecfe4ef34a931cc64a2cba46e3cf9fdf96cea4
- [7.4~]
- ↑の UPGRADING への追記
cmb69: Fix #77943: imageantialias($image, false); does not work
- https://github.com/php/php-src/commit/cd94cf60a2379ccfe4619b1b9384a68b3e7a1205
- [7.2~]
- ext/gd で、imageantialias($image, false) が機能していなかった問題の修正
cmb69: Add tests for bug77943
- https://github.com/php/php-src/commit/3891e0d13a0e85e51a450a868960e98b5c74df56
- [7.2~]
- ext/gd で、↑のてテストを追加
- 投稿日:2019-04-30T20:33:01+09:00
【PHP初心者向け】オブジェクト指向について解説!
はじめに
- オブジェクト指向について調べて理解したことをまとめました。(一旦、理解したところまで書いたので随時更新していく予定です)
オブジェクト指向とは
- プログラムを機能ごとにまとめて作成していく設計手法です。
(例)ECサイトの場合
- 例えば、ECサイトの場合、「会員登録機能」「ログイン・ログアウト機能」「商品登録機能」「商品一覧表示機能」など様々な機能があります。
- これらを機能ごとに分けてプログラムを作成することがオブジェクト指向です。
オブジェクト指向のメリット
機能の追加や修正が簡単にできる
- 後から機能を追加する時に、その部分だけ修正すれば良いので簡単です。
情報の管理や内容が特定しやすい
- 機能ごとにプログラムが書かれているので、どこのプログラムに何が書かれているのかが、誰が見てもわかりやすくなります。
オブジェクト指向の専門用語について
- オブジェクト指向には専門用語がいくつかあるので紹介していきます。
オブジェクトとは
- オブジェクトは次で説明するクラス(設計図)を元に作られる物体です。
クラスとは
- オブジェクトの設計図。
- 機能に関する変数(プロパティ)と関数(メソッド)をまとめたもの。テンプレート(雛形)のようなイメージ。
- クラスを元にオブジェクトを作っていきます。
クラスの書き方
- クラスは「class クラス名」と定義する。
- クラス名は大文字で始めます。
<?php class Products{ //ここに処理が入ります } ?>インスタンスとは
- クラス(設計図)をもとに実体化されたものをインスタンスと言います。(実体化されたものをインスタンスやオブジェクトと呼びます)
- インスタンスは「new クラス名()」で生成できます。
インスタンスの書き方
<?php class Products{ } $product = new Products(); ?>プロパティとは
- オブジェクトが持つ変数(データ)のことです。
- クラスで定義された変数のことを「プロパティ」と言います。
プロパティの書き方
- プロパティは「public $プロパティ名」で定義します。
<?php class Products{ public $name; } $product = new Products(); ?>プロパティの呼び出し方
- 「インスタンス->プロパティ名」で、そのインスタンスが持つプロパティを呼び出すことができます。
- クラスに定義されている値を取り出すようなイメージです。
<?php class Products{ public $name; } $product = new Products(); $product->name = "パソコン"; echo $product->name;メソッドとは
- インスタンスが持つ関数のことです。
- クラスで定義された関数を「メソッド」と言います。
メソッドの書き方
- メソッドは「public function メソッド名()」のように定義します。
- 「インスタンス->メソッド名()」でメソッドを呼び出します。
<?php class Products{ public $name; public function sayProduct(){ echo "商品:" . $this->name; } } $product = new Products(); $product->name = "パソコン"; $product->sayProduct(); ?>アロー演算子「->」とは
- 「->」の記号のことをアロー演算子と言います。
「インスタンス->プロパティ名」や「インスタンス->メソッド名()」のように定義します。- 左辺にはインスタンスを指定します。右辺には左辺のインスタンスが持つプロパティやメソッドを指定します。そうすることで、そのクラスが持つプロパティやメソッドを呼び出すことができます。
$thisとは
- クラス内のプロパティを呼び出したい時に「$this」を使います。
- 「このクラス内の」という意味になります。
- 「$this」はクラス内の定義したメソッドの中でのみ使用できます。
$thisの書き方
class クラス名{ public $変数名; public function メソッド名(){ echo this->$変数名; } }コード例
<?php class Products{ public $name = "パソコン"; public function getName(){ echo $this->name; } } $product = new Products(); $product->getName(); ?>
- 投稿日:2019-04-30T20:33:01+09:00
【PHP初心者向け】オブジェクト指向の専門用語について解説!
オブジェクト指向とは
- プログラムを機能ごとにまとめて作成していく設計手法です。
(例)ECサイトの場合
- 例えば、ECサイトの場合、「会員登録機能」「ログイン・ログアウト機能」「商品登録機能」「商品一覧表示機能」など様々な機能があります。
- これらを機能ごとに分けてプログラムを作成することがオブジェクト指向です。
オブジェクト指向のメリット
機能の追加や修正が簡単にできる
- 後から機能を追加する時に、その部分だけ修正すれば良いので簡単です。
情報の管理や内容が特定しやすい
- 機能ごとにプログラムが書かれているので、どこのプログラムに何が書かれているのかが、誰が見てもわかりやすくなります。
オブジェクト指向の専門用語について
- オブジェクト指向には専門用語がいくつかあるので紹介していきます。
オブジェクトとは
- オブジェクトは次で説明するクラス(設計図)を元に作られる物体です。
クラスとは
- オブジェクトの設計図。
- 機能に関する変数(プロパティ)と関数(メソッド)をまとめたもの。テンプレート(雛形)のようなイメージ。
- クラスを元にオブジェクトを作っていきます。
クラスの書き方
- クラスは「class クラス名」と定義する。
- クラス名は大文字で始めます。
<?php class Products{ //ここに処理が入ります } ?>インスタンスとは
- クラス(設計図)をもとに実体化されたものをインスタンスと言います。(実体化されたものをインスタンスやオブジェクトと呼びます)
- インスタンスは「new クラス名()」で生成できます。
インスタンスの書き方
<?php class Products{ } $product = new Products(); ?>プロパティとは
- オブジェクトが持つ変数(データ)のことです。
- クラスで定義された変数のことを「プロパティ」と言います。
プロパティの書き方
- プロパティは「public $プロパティ名」で定義します。
<?php class Products{ public $name; } $product = new Products(); ?>プロパティの呼び出し方
- 「インスタンス->プロパティ名」で、そのインスタンスが持つプロパティを呼び出すことができます。
- クラスに定義されている値を取り出すようなイメージです。
<?php class Products{ public $name; } $product = new Products(); $product->name = "パソコン"; echo $product->name;メソッドとは
- インスタンスが持つ関数のことです。
- クラスで定義された関数を「メソッド」と言います。
メソッドの書き方
- メソッドは「public function メソッド名()」のように定義します。
- 「インスタンス->メソッド名()」でメソッドを呼び出します。
<?php class Products{ public $name; public function sayProduct(){ echo "商品:" . $this->name; } } $product = new Products(); $product->name = "パソコン"; $product->sayProduct(); ?>アロー演算子「->」とは
- 「->」の記号のことをアロー演算子と言います。
「インスタンス->プロパティ名」や「インスタンス->メソッド名()」のように定義します。- 左辺にはインスタンスを指定します。右辺には左辺のインスタンスが持つプロパティやメソッドを指定します。そうすることで、そのクラスが持つプロパティやメソッドを呼び出すことができます。
$thisとは
- クラス内のプロパティを呼び出したい時に「$this」を使います。
- 「このクラス内の」という意味になります。
- 「$this」はクラス内の定義したメソッドの中でのみ使用できます。
$thisの書き方
class クラス名{ public $変数名; public function メソッド名(){ echo this->$変数名; } }コード例
<?php class Products{ public $name = "パソコン"; public function getName(){ echo $this->name; } } $product = new Products(); $product->getName(); ?>
- 投稿日:2019-04-30T16:07:18+09:00
【Laravel初心者】Laravelのプロジェクトを本番環境リリース時にしたこと
前提とする環境
ubuntu 18.04 php 7.2 Laravel 5.8 mysql 5.7.25 apache 2.4.29本番環境ですること
サーバー自体の基本設定(言語・時間設定等)は完了している前提で、自分がLaravelのプロジェクトをローカル環境と同様に動かすために必要だったことは以下になります。
- 各ミドルウェアの設定
- .envの作成
- vendor配下のインストール
- DB設定
- laravelプロジェクト内の権限の追加
各ミドルウェアの設定
ApacheやMySQLなどプロジェクトに必要な設定は当然する必要があります。
この部分は本記事では詳細割愛しますが、以前書いた記事で説明していますのでそちらを参照ください。
【入門】ubuntu18.04にLaravel5.8のプロジェクト作成する手順.envの作成
.envは各環境に依存する設定を記述するファイルです。
laravelプロジェクトにおいてはデフォルトで.gitignoreに登録されているため、新しい環境にプロジェクトを持っていったら毎回作成する必要があります。プロジェクト直下に置いてある.env.exampleをコピーして、.envを作成するのがおすすめです。
例えばlaravel+mysqlのシンプル構成なら、下記のように変更しておけば問題ないでしょう。.envの例APP_NAME=example ←自分のプロジェクト名を入れましょう APP_ENV=production ←本番環境ならproductionに変更しましょう APP_KEY= ←後ほど説明します APP_DEBUG=false ←本番環境ならfalseにしましょう trueだと画面上にエラーが表示されます APP_URL=http://hogehoge.com ←URLを入れましょう LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 ←DBサーバーが別れている場合はDBサーバーのIPを入れましょう DB_PORT=3306 DB_DATABASE=hoge ←このプロジェクトでアクセスするデータベースです DB_USERNAME=fugauser ←このプロジェクトのDBアクセスで使うユーザーです DB_PASSWORD=passwordhoge ←このプロジェクトのDBアクセスで使うパスワードですcomposerでlaravelプロジェクトを直接作成した場合はAPP_KEYは最初から作成されているのですが、.env.exampleからコピーして手動で作成した場合は、以下のコマンドでアプリケーションキーを作成します。コマンド実行が完了すれば自動的に.envにキーが入力されます。
コマンドラインでartisanを実行するphp artisan key:generatevendor配下のインストール
.envと同様に.gitignoreに設定されているため、vendorディレクトリ(laravel本体が置いてある)もインストールする必要があります。
以下のコマンドを実行すればvendor以下にlaravelがインストールされます。composer installDB設定
他のサイトなどをみた限りでは、データベース作成などの必要はなさそうですが、自分の場合マイグレーション実行とは別にデータベース作成が必要でした。結果的に行ったこと一覧は以下になります。
- ユーザー作成
- データベース作成
- マイグレーション実行(php artisan migrate)
laravelプロジェクト内の権限の追加
自分の場合Laravelプロジェクトで何箇所か権限がないためFatal errorが出ました。
以下のページを参考に、いくつかディレクトリに権限を付与することでエラーが解消されました。
- 投稿日:2019-04-30T16:00:08+09:00
TwitterAPI で、OAuth認証の署名を作成する際に使用するURLに ? を付けるとエラーになる
エラーの内容
code : 32
message : Could not authenticate you.エラーの原因,解決策
とても単純で、OAuth認証の署名を作成する際に使用するURLの末尾に ? が付いていることが原因です。
クエリを付ける場合は、署名を作成した後にURLの末尾に ? を付けましょう。環境
PHP
Twitter API上記のようなエラーが発生してしまうケース
下記のコードは署名部分の詳細なコードは省いてます。
example_failure.php// APIのリクエスト先URL // ? を付けてしまうとエラーとなってしまいます $request_url = 'https://api.twitter.com/1.1/users/show.json?' ; /* OAuthの署名作成処理部分 */ // クエリとしてAPIへ送信するパラメータ $params_a = array( "screen_name" => $twitter_id, "include_entities" => "false", ) ; // パラメータがある場合、URLの末尾に追加 if( $params_a ) { $request_url .= http_build_query( $params_a ) ; }動作する例を以下に示します。
example_success.php// APIのリクエスト先URL // ? はここで付けない $request_url = 'https://api.twitter.com/1.1/users/show.json' ; /* OAuthの署名作成処理部分 */ // クエリとしてAPIへ送信するパラメータ $params_a = array( "screen_name" => $twitter_id, "include_entities" => "false", ) ; // パラメータがある場合、URLの末尾に追加 if( $params_a ) { // ここで ? を付ける $request_url .= '?' . http_build_query( $params_a ) ; }とても単純なミスですが、エラーメッセージから原因を推測することが難しいですね・・・
- 投稿日:2019-04-30T15:30:38+09:00
Laravelでjson形式の設定ファイルを設置する
概要
Laravelでjson形式の設定ファイルを設置する最適な場所を探した結果こうなった、という紹介です。
要件
- 関数などを使って簡単に設定にアクセスできる
- 設定ファイルなので、ファイル自体の削除・書き込みがされない
結果的に、configにはjsonファイルを読み出す処理を書いて、別の場所にjsonファイルを設置しています。
これがベストな方法かはわかりませんが、以下の難点を避けて、要件を満たすことはできています。もっといい方法知ってるという方は、ご教示お願いします。
注:こうはしなかったという選択肢
configをjsonで書いておきたいっていうのはよくあると思うのですが、Laravelではヘルパー関数の
config()で読み出せるのはPHP配列なので、単純にconfig以下にjsonファイルをおいてもうまく動作しません。また、
storageに設置して読み出すという方法もあり、ライブラリ( https://github.com/labkod/laravel-config )が作られたりしてしますが、storage以下のファイルはアプリケーション上から、編集・削除できるので設定ファイルを置きたくないです。(Storage::delete()とか)解決法概要
config/json/以下にjsonファイルを設置config/myconfig.json.phpを作成- 設定ファイルをリポジトリ管理したくない場合
.gitignoreに追記config/json/myconfig.json.exampleを作成解決法詳細
jsonファイル設置
$ mkdir config/json $ mv /path/to/json/file config/json/myconfig.json
config/myconfig.json.phpを作成condigファイルでjsonファイルを読みだし、デコードする処理を書きます。
config/myconfig.json.php<?php return json_decode(file_get_contents(__DIR__ . '/json/myconfig.json'), true);以上の設定で、Laravelのヘルパー関数
configを使って、設定の読み出しができます。ドット記法も使えちゃいます。app/any_laravel_file.php$config = config('myconfig.json');設定ファイルをリポジトリ管理したくない場合
configには秘匿したい情報もあったりすると思うので、その場合は以下の手順でgit管理から外しておくといいと思います。
.gitignoreに追記.gitignoreconfig/json/*.json
config/json/myconfig.json.exampleを作成$ cp config/json/myconfig.json config/json/myconfig.json.example秘匿したい情報を削除。
exampleファイルのみをgit管理すればOKでしょう。課題
とりあえず、一つの設定ファイルにはこれで対応できます。
この後運用した結果、設定ファイルを置き忘れるなどの管理面での問題が出てくるかもしれませんが、その際はまた考えます。
- 投稿日:2019-04-30T10:54:37+09:00
4/30 PHP 組込関数について
- 投稿日:2019-04-30T10:54:37+09:00
4/30 PHP 関数について
- 投稿日:2019-04-30T10:38:12+09:00
4/30 foreach構文
foreach構文
配列の中から要素を取り出してループ処理を行う
構文例
<?php //りんご…を代入 $number_array =["りんご", "ぶどう", "もも", "パイナップル"]; //valueに向けて中身を取り出す foreach ($number_array as $value) { echo $value.PHP_EOL; } ?>keyとvalueを別々に取り出す
例
<?php $associative_array = [ "name" => "山本", "age" => 23, "from" => "東京都", "gender" => "male" ]; foreach ($associative_array as $key => $value) { echo $key.PHP_EOL.":"; echo $value.PHP_EOL; } ?>
- 投稿日:2019-04-30T10:27:17+09:00
4/30 PHP自習 for構文
- 投稿日:2019-04-30T09:26:56+09:00
PHP マイクロフレームワーク Slim v4 のアルファ版が出ました!
実装の薄さで言えばトップクラスの PHP マイクロフレームワーク Slim Framework の最新メジャーバージョン、 v4 のアルファ版がリリースされていました。
v4 の作成中ドキュメントは現在こちらで閲覧出来ます(リリース後は URL 変わりそう)。
リリースノートはこちらで、フィードバックはこちらで受け付けているようです。
※ Slim Framework 自体についての紹介は省略します。
v3 からどう変わった?
PSR 準拠を進めた
PSR-7: HTTP Message Interface
PHP のスタンダードなインターフェース(
なお Symfony/Laravel 系列を除く)として存在する PSR 準拠をデザインの主軸に置いている Slim ですが、 v3 では PSR-7 である HTTP Message 部分を自前で実装して提供していました。v4 からはその実装も slim/psr7 の方に移動していて、ユ-ザが任意の PSR-7 実装を選択して使えるようになっています。
現在は公式として Slim PSR-7, Nyholm PSR-7, Guzzle PSR-7, Zend Diactoros の四種類がサポートされています。インターフェースを実装することでその他の PSR-7 実装を利用することも可能です。
公式でサポートされている実装は, require するだけで自動的に存在するかどうかを判別してくれます。
PSR-11: Container Interface
PSR-11 Container は Pimple がデフォルトでインストールされていました。
Pimple もまたマイクロな DI コンテナとなっていて、本当に「手動で登録して」「手動で取得する」しか出来ないシンプルなものでした。コンストラクタに型を記述しておけば自動で依存関係を解決してインスタンス化出来る AutoWiring 機能を持っているのが一般的な DI コンテナです。
この Pimple も依存関係から外れて、 DI コンテナ実装を自由に選べるようになりました。
PSR-15: HTTP Handlers
最もメインで破壊的な変更として、 PSR-15 HTTP Handlers による HTTP ハンドリングを行う形式になったことが挙げられます。
PSR-15 を最速で実装して話題になったのは Zend Expressive ですが、それに追従する形となります。
これは PSR-7 の Request を受け取って、 Middleware を経由し、 Response を生成する、という一連の流れを定義したインターフェースです。
Slim\AppメインクラスがこのRequestHandlerInterfaceを実装したものとなっています。PSR-17: HTTP Factories
PSR-7 の Request や Response クラスをどう生成するのか定義した PSR-17 HTTP Factories も利用されています。
ルーティングの実装依存を弱めた
これまで通り nikic/fast-route を依存として明示されていて、これを利用したルーティングを実装していますが、インターフェ-スを経由してユーザが異なるルーティングライブラリを使うことも出来るようになりました。いよいよ何を実装しているのかわからないレベルです。
エラーハンドリングを実装しやすくした
v3 で任意のエラーハンドリングを行う際は、コンテナの
errorHandlerキ-に関数を登録する形で、 403/404/PHP Error は別のキ-に登録する必要があるなどかなり分かりづらい形式でしたが、今回からErrorMiddlewareが実装され、ミドルウェアを通してハンドリングを調整出来るようになりました。また、例外が
SlimExceptionではなくHttpExceptionとなり、各種ステ-タスコ-ドごとのクラスに分けられたので、型を見て処理を分けることができるようになりまし。レスポンスの Emit をカスタマイズしやすくした
v3 では
Slim\Appクラス内でレスポンスを出力していましたが、任意の実装で出力出来るようSlim\EventEmitterクラスに分割されました。連想配列によるコンフィグをやめた
以前は謎の連想配列をコンフィグとして
Slim\Appクラスのコンストラクタに渡し挙動を変更していましたが、代わりにそれぞれの設定を複数のMiddlewareクラスのコンストラクタで明示的に指定するようになりました(エラ-を表示するかどうかなど)。
根本的に、 Slim は HTTP リクエストを受け取り、適切なコールバックルーチンを実行し、 HTTP レスポンスを返すだけの Dispatcher である
Slim のコアコンセプトとしてこのようなものが挙げられています。 PHP 利用者は HTTP プロトコルの処理を($_GET などを通して...)したいわけではなく、受け取ったリクエストを処理してレスポンスを生成したいだけです。
PHP 特有の HTTP プロトコル周りの難しい処理を Slim が全て行ってくれるので、 Slim の利用者は 実装したい処理だけ を実装することができます。
個人的にはかなり,かなり良くなったと思います。
v3 までの実装だと,「小規模な実装であれば使えそうだけど,スケールしづらいなあ...」と思っていましたが,ここまで抽象化が進んでいれば 大規模な所までスケールして いけるのではないかという期待があります。
DDD によるサンプル実装として l0gicgate/Slim-Skeleton が提供されています。これをみるとスケールも全然出来そうな可能性を感じます。
代わりに、 v3 との変更がかなり大きいため,バージョンアップはかなり厳しいのではないでしょうか。 v3 を使っている人はそのまま,これから新しくアプリケーションを構築する人は v4 を使っていくのが良いのではないでしょうか。これからの動向が楽しみですー。
参考資料
