Home > アーカイブ > 2014-06
2014-06
「PHPコードではなくPHPコードの「書き方」を知る」を発表してきました
PHPカンファレンス関西2014で「PHPコードではなくPHPコードの「書き方」を知る」を発表してきました。
写真提供:久岡写真事務所
別トラックに人気セッションがひしめく中、多くの方に聴いて頂き、ありがとうございましたm(_ _)m
発表内容
PHP 中級者(中級がどこかというのはありますが)を目指す初心者の方を対象に、FizzBuzz のコードを、関数にまとめて、クラス化するというのをライブコーディングで行いました。
また、関数にまとめた段階で、自動テストを書いて、実行結果を目で確認するのではなく、テストを実行して確認するというスタイルを取りました。
発表資料は以下です。
コードを書きながら進めていく形なので、資料だけでは少し伝わらない部分があるかもしれません。
デモで書いた PHP コードは、GitHub で公開しています。Sample1, Sample2 とディレクトリが分かれています。上記資料には、対応するディレクトリを記載しているので、参考にしてみて下さい。
https://github.com/shin1x1/how-to-write-php-code-with-fizzbuzz
PhpStorm のプレゼンテーションモード
ライブコーディングには、PhpStorm のプレゼンテーションモードを使いました。エディタペインが全画面表示になるので、ライブコーディングには最適ですね。
プレゼンテーションモードの起動は、command + shift + a で [Enter action or option name] を表示して、「presen」まで入力して、[Toggle Presentation mode]を実行しています。
プレゼンテーションモードから復帰する際も同じ操作を行います。
さいごに
準備の段階では、発表内容から先に進めて、処理の部分と出力の部分を別クラスにして、それを FizzBuzz に DI して、インターフェースに切り出して、インターフェースは同じだが振る舞いの異なるクラスとの差し替えてなど、発展させていっていたのですが、時間の関係もあり、削りました 😀
今回のように、誰かがコードを書いたり、操作をしたりというのを、生で見る、というのも、セッションの一つの面白さだと思うので、そこが伝わっていれば嬉しいです。
- コメント (Close): 0
- トラックバック (Close): 0
Laravel DB テーブルの簡易メンテ画面を作る Laravel-Table-Admin を作りました
マスタテーブルのメンテナン画面は、単純な CRUD 画面なのですが、テーブル数が多いと、いちいち作るのも手間がかかります。
そこで、Laravel のパッケージとして、Laravel-Table-Admin を作りました。
https://github.com/shin1x1/laravel-table-admin
Laravel の対象バージョンは、4.1 以降としています。
何をするものか
マスタテーブルのメンテナンス画面など、ごく単純な CRUD 画面だけを作るパッケージです。
作るといっても、コードジェネレータではなく、設定を行えば、自動でテーブルスキーマから画面を動的に構築します。CakePHP の Scaffold と似た発想です。
いわば、機能がごくシンプルになった phpMyAdmin / phpPgAdmin を Laravel アプリケーションに組み込めるというものです。
百聞は一見に一見に如かずなので、画面キャプチャを。
一覧画面です。
編集画面です。
外部キーがある場合は、参照先テーブルの内容がプルダウンで選択できます。
デモアプリケーションを公開しています。こういった画面を簡単に作ることができます。
http://laravel-table-admin.herokuapp.com/crud/classes
インストール
Composer でインストールします。
composer.json に以下を追加して、composer install or update して下さい。
{ "require": { "shin1x1/laravel-table-admin": "~0.1.0" } }
app/config/app.php
に ServiceProvider と Facade を追加します。
'providers' => [ // .... 'Shin1x1\LaravelTableAdmin\TAbleAdminServiceProvider` ],
'aliases' => [ // .... 'TableAdmin' => 'Shin1x1\LaravelTableAdmin\TableAdminFacade', ],
あとは、app/routes.php
で、このパッケージで CRUD 画面を表示する対象のテーブルを指定するだけです。下記では、classes
, nationalities
, riders
という3つのテーブルについて CRUD 画面を表示します。
TableAdmin::route([ 'classes', 'nationalities', 'riders', ]);
URL は、http://localhost/crud/{TABLE}
になります。{table}
の部分が、上記で指定したテーブル名になります。
これで、URL にブラウザからアクセスすると CRUD 画面が表示されます。
デモアプリケーションのコードも公開していますので、参考にして下さい。
https://github.com/shin1x1/laravel-table-admin-example
対象データベース
MySQL と PostgreSQL を対象としています。
対象テーブル
今のところ、プライマリキーがid
で、一覧やプルダウンメニューでの表示カラムはname
に固定しています。
多くの場合、これで問題無いと思いますが、ニーズがあれば、設定で変更できるような対応も考えています。
実用する際のポイント
実際のところ、この画面は管理者用機能になるでしょう。TableAdmin::route()
での指定では、Route::group()
などを使って、認証をかけると良いでしょう。
// admin フィルターがあるとして Route::group(['before' => 'admin'], function() { TableAdmin::route([ 'classes', 'nationalities', 'riders', ]); });
Laravel-4-Generators
同様のことを行う Laravel パッケージとしては、Laravel-4-Generators が有名です。
これはとても便利なパッケージで、私も migration file のジェネレータとして良く利用しています。
大きく異なるのは、Laravel-4-Generators は、コードジェネレータですが、Laravel-Table-Admin はコードの生成は行なわず、動的にテーブルスキーマを読んで、画面を組み立てています。
双方とも良し悪しはあるのですが、動的に画面を生成した方が、画面デザインの修正などを一箇所で行うことができるので、後であれこれ変更する際は楽だと判断しました。
Laravel-4-Generators は、バージョン2 以降には、ビューテンプレートのジェネレートで、一覧画面やフォーム画面の詳細部分が生成されなくなりました。これにより、単純にジェネレートしても、CRUD画面が作れなくなっています。これも本パッケージを作ろうと思った動機の一つです。
さいごに
自分が欲しかったので、作ってみました。今のところ、必要最低限を実装したという状態です。
あとは、付加機能(一覧での検索や並び替え、テーブルカラムの対応等)を足していこうと思っています。コントリビュートもお待ちしています:D
- コメント (Close): 0
- トラックバック (Close): 0
はじめてのPHPカンファレンス関西
- 2014-06-24 (火)
- event
いよいよ、今週末にPHP カンファレンス関西 2014が開催されます。
今年で、4 回目の開催となるのですが、こうしたイベントに初めて参加する、という方も多いのではないでしょうか。
そこで、リレーブログ 12 日目の今日は、はじめてカンファレンスに参加する方に向けて、気になるあれこれを書いてみたいと思います。
(昨日のリレーブログは、@tanakahisateru さんの うまれかわるMVC 〜PHPカンファレンス関西2014にむけてでした。)
服装
いきなり服装?という人がいるかもしれませんが、実は初めてだと気になったりします。
みんなスーツとかだったらどうしよう。いちおうジャケットくらい羽織ろうかな、いや、Tシャツとデニムの人ばかりだと浮くかも、うーーん。。。
分かります。ちゃんとしてる人ほど気になるポイントですね。
はい、お答えしましょう。
外を出歩く一般的な服装であれば、何でも ok です。
休日にヨドバシカメラに行く服装だと思って貰えれば良いかと。
カジュアルな方が多いですが、中にはジャケットを羽織っている方もいますし、このあたりは日頃の服装ですね。
気軽な服装でお越し下さい 😀
会場へのアクセス
まずは、会場へアクセスについて。
公式サイトに地図があるので、こちらを参考に。地下鉄でいうと堺筋本町駅から歩くのが良いですね。駐車場等はあまり無いので、公共交通機関で行きましょう。(懇親会がありますしね!)
http://conference.kphpug.jp/2014/#access
駅を降りて、迷ってしまうという人は、下記リンクをスマートフォンで開けるようにしておきましょう。会場の方角を指してくれるので、この指示どおり歩けば、会場に向かうことができます。
来場時間
会場に来る時間帯ですが、10:00 開場となっていますので、10:00 頃に来て頂ければ大丈夫です。
なお、1F には(小さいですが)カフェがあるので、早めに来て、こちらで朝ごはんを食べるというのも良いですね。(堺筋本町駅から会場までの道中でも、カフェが何件かあったはず)
受付
会場に着いたら、まず受付をしましょう。受付は、4F で行っています。(6Fもセッション会場ですが、受付は 4F なのでお間違い無く。)
まずはエレベータで 4F へどうぞ。
セッション
セッションは、しっかり話を聞いて、楽しみましょう。
学校の授業ではないので、かしこまって聞く必要はありません。面白いところは笑い、気になることは質問してみても良いですね。
基調講演の後は、マルチトラックになるので、聞きたいセッションに移動します。6F のセッションは、定員が少なめなので、どれにしようかなと迷ってる内に埋まってしまう可能性があります。
事前にどのセッションに行くか決めておくと良いです。
昼ごはん
さて、午前のセッションが終わって、昼ごはんです。
昼ごはんは、会場周辺のご飯屋さんに行きます。昼時は混んでしまうので、昼一で聴きたいセッションがある人は時間を気にしながら昼食を取りましょう。
出展ブースと丸善&ジュンク堂
セッションの合間には、出展ブースに立ち寄ってみましょう。
色々なデモや展示があるので、セッションとはまた違った楽しさがあります。ステッカーなどノベルティの配布もあるので、それらを集めて回るのも良いですね。
また、今回は、丸善&ジュンク堂さんの出張販売ブースがあります!
話題の技術書を販売して頂けるので、この機会にぜひ手にとってみて下さい。書籍を執筆された方によるサイン会なども企画しているので、ぜひ直接お話をしてみて下さい。
電源、WiFi
いまどき気をつけておきたいのが、電源と WiFi についてです。
残念ながら、参加者用のインターネット回線(WiFi)は、用意していません。ご了承下さい。
また、電源についても、一部ではご用意していますが、皆さんが充電できるほどではありません。譲り合って利用して頂くようにお願いします。
Twitter / Facebook
もちろん、Twitter や Facebook でも交流できるチャネルを用意していますよ。
Twitter の公式ハッシュタグは「#phpkansai」です。関西PHP勉強会と共通なので、すでに tweet が流れていますね。
当日は、トラックごとにハッシュタグを設ける予定です。セッション内容については、トラック専用のハッシュタグと「#phpkansai」を両方付けると良いです。
Facebook には、参加者の方同士で交流できるようにグループを作成しました!カンファレンスに参加される方であれば、どなたでもどうぞ。
https://www.facebook.com/groups/218826904993793/
ぼっちだけど…
イベントに意気込んで参加したものの、なんだか周りは仲良さそうで、楽しそう。自分だけ一人でなんだかなあ、ということがあります。
わかります。
そんな時は、まずは「ぼっちでも ok」と思いましょう。一人で参加して、誰とも話さず帰る。全然 ok です。セッションやブースを楽しめれば、それで ok 。何ら問題無しです。ぼっち上等。
でも、少しでも誰かと話したいなあという人は、ちょっぴり勇気を出して話してみましょう。
話しかけるのが難しければ、Twitter や Facebook で、これこれの話がしてみたい、とか投稿するだけでも良いです。参加者はわりと見ているので、誰かが返信をくれるかもしれません。少しでもやりとりがあれば、面と向かっても話しやすいものです。
そういった意味では、当日までに、Twitter や Facebook で自己紹介がてら何か投稿しておくと、「あ、○○と書いてた人だ」と認識してもらえて楽ですよ。
ちなみに以前、下記のようなエントリを書きました。ぼっちで少し不安という人は、読んでみて下さい。
いよいよ今週末!
さあ、今週末にはカンファレンス当日になります。
これ不安だな、気になるなという方は、Twitter で「#phpkansai」を付けて tweet するか、Facebook グループへ投稿して下さい。
当日は一緒に楽しみましょうー!
ちなみに、私は、スタッフもやりますが、午後に「PHPコードではなく、PHPコードの「書き方」を知ろう」という発表も行います。セッションに参加される方、よろしくお願いします!
- コメント (Close): 0
- トラックバック (Close): 0
Heroku で作るスケーラブルな PHP アプリケーション
第16回関西PHP勉強会で、「Heroku で作るスケーラブルな PHP アプリケーション」という発表をしてきました。
発表資料
Heroku でちゃんと動く PHP アプリケーションを作ると、自然とスケーラブルな構成になりますよ、という内容です。
会場でも、Heroku 自体は知っているが、まだ使ってはいないという人が多かったので、細かな Tips は省いて、こういった構成でやりますよというイメージをお話しました。
実際に構築する上での Tips などは、また別の機会に話してみたいです。
サンプルアプリケーション
サンプルアプリケーションとして、簡単な画像アップロードサイトを Laravel 4.2 で作りました。
https://github.com/shin1x1/laravel-on-heroku
アプリケーションデータは、以下のアドオンへ保存するようにしています。画像ファイルは、アドオンではなく、S3 に保存しています。
- データベース = Heroku Postgres
- ログ = Papertrail
- セッションストレージ = Redis To Go
- 画像ファイル = S3(AWS)
使い方は、README.md に記載しているのですが、Heroku 関係は、heroku_create というシェルスクリプトにまとめています。
これを流せば、Heroku アプリケーションの作成、環境変数追加、アドオン追加などをひと息で行うことができます。
#!/bin/sh heroku create -r heroku heroku config:set LARAVEL_ENV=heroku heroku addons:add heroku-postgresql heroku addons:add newrelic:stark heroku addons:add scheduler heroku addons:add sendgrid heroku addons:add redistogo heroku addons:add papertrail heroku addons:add librato
デモ用に Heroku にデプロイしています。
http://infinite-caverns-8536.herokuapp.com/
さいごに
Heroku は、無料から使えるのが良いですね。アドオンも機能制限(保存レコード数等)版ながら無料で使えるものが多いので、アプリケーションからの連携を試すことができます。
スケーラブルな PHP アプリケーションを作る練習場として、Heroku を触ってみるというのも面白いですよ。
- コメント (Close): 0
- トラックバック (Close): 0
PHP で配列を走査して処理するのは、for / foreach だけじゃない
PHP で配列の要素にアクセスして、処理を行うには、for や foreach を使うのがおなじみです。
この方法でも良いのですが、PHPには、それ以外にも配列を走査する関数やライブラリがあります。ここでは、配列を走査して処理を行う方法を見てみましょう。
サンプル仕様
このエントリで以下の配列を処理対象とします。array.php
で保存されている想定です。
<?php return [ [ 'id' => 1, 'year' => 1993, 'name' => 'Harada', ], [ 'id' => 2, 'year' => 2001, 'name' => 'Kato', ], [ 'id' => 3, 'year' => 2009, 'name' => 'Aoyama', ] ];
この配列について処理を行います。
- 配列内に連想配列が格納されており、
name
とyear
というキーを持つ year
が、2000以上の要素のみ、結果配列に格納する- 結果配列には、
name
とyear
を連結した文字列を格納する
求める結果は、以下になります。
array(2) { [0] => string(8) "2001Kato" [1] => string(10) "2009Aoyama" }
foreach を使う
まずは、foreach を使う方法です。よくある手続き的なPHPコードですね。foreachで配列を回して、year
が2000以上の場合だけ、結果配列に値を入れています。
<?php $array = include('array.php'); $result = []; foreach ($array as $v) { if ($v['year'] < 2000) { continue; } $result[] = $v['year'] . $v['name']; } var_dump($result);
array系関数を使う
次に、filter と map を使って、実装します。PHP には、array_map
とarray_filter
関数があるので、これを使います。
実装は下記になります。array_filter
とarray_map
を使うので、それぞれ配列の要素をフィルタリングする、要素に処理を行い、結果配列を格納するといった意図がより明確になります。
ただ、array_fileter
とarray_map
で引数の順序が異なるのと、2 行に分かれており、中間の結果を保持する一時変数が必要になるのが難点です。
<?php $array = include('array.php'); $tmp = array_filter($array, function($v) { return $v['year'] >= 2000; }); $result = array_map(function($v) { return $v['year'] . $v['name'] ; }, $tmp); var_dump($result);
試しに 1 行にまとめると下記になります。一見良さそうですが、このコードをぱっと見て、array_filter
が先に適用されるのと認識できるでしょうか。
$result = array_map(function($v) { return $v['year'] . $v['name'] ; }, array_filter($array, function($v) { return $v['year'] >= 2000; }));
Laravel(Illuminate\Supportパッケージ)を使う
filter / map を使う別の例として、Illuminate\Supportパッケージ のIlluminate\Support\Collection
クラスを使います。
https://github.com/illuminate/support
Illuminate\Support パッケージは、Laravel を構成しているパッケージの一つで、フレームワークを使わずとも、このパッケージ単体でも利用することができます。
インストールするには、composer.json
に以下のように指定して、composer install
もしくはcomposer update
を実行します。
{ "require": { "illuminate/support": "~4.2" } }
Illuminate\Support\Collection
を使うことで、メソッドチェインで配列を操作することができます。
実装すると下記のようになります。filter
メソッドでフィルタリングを行い、その結果配列に対してmap
メソッドを実行して、結果配列の要素を作成していることが分かります。
<?php use IlluminateSupportCollection; require_once __DIR__ . '/vendor/autoload.php'; $array = include('array.php'); $result = Collection::make($array)->filter(function ($v) { return $v['year'] >= 2000; // filter })->map(function ($v) { return $v['year'] . $v['name']; // map })->toArray(); var_dump($result);
Ginq を使う
Illuminate\Support\Collection
と似た機能を持つライブラリに、Ginq があります。こちらもメソッドチェインで配列への操作を行うことができます。
https://github.com/akanehara/ginq
インストールするには、composer.json
に以下のように指定して、composer install
もしくはcomposer update
を実行します。
{ "require": { "ginq/ginq": "~0.1" } }
Ginq を使って、実装すると、下記のようになります。配列を取り込むところ以外は、Illuminate\Support\Collection
と全く一緒になりました。
<?php require_once __DIR__ . '/vendor/autoload.php'; $array = include('array.php'); $result = Ginq::from($array)->filter(function ($v) { return $v['year'] >= 2000; // filter })->map(function ($v) { return $v['year'] . $v['name']; // map })->toArray(); var_dump($result);
さいごに
4 つのパターンで配列を走査して、結果配列を求めるという処理を書いてみました。
foreach は、配列の要素を走査していくという汎用的な役割なので、そのループの中で様々な処理を書くことができます。一方、array系関数やライブラリは、それぞれのメソッドで用途や目的が決まっているので、どのような処理を行い、結果、どのような解を求めているのが分かりやすいです。
また、filter や map という概念は、多くのプログラミング言語で利用されており、こうした概念をおさえておくと、別の言語でコードを書いたり、読んだりする際に、意図を汲むことができ理解しやすくなります。
foreach で書くことがダメだというわけではなく、それ以外の書き方が、PHPにもあるということを知っておくということが大事ですね。
Illuminate\Support\Collection と Ginq
Illuminate\Support\Collection と Ginq は、Linq to Object ライクなインターフェースを持ち、実際に使い方も似ています。
ただ、この2つで大きく違うのが、評価のタイミングです。
Illuminate\Support\Collection は、map
メソッドを実行したタイミングで即時に評価され、処理が行われます。
一方、Ginqは、遅延評価となっており、map
メソッドを実行してもすぐに map 処理が行われません。このエントリの例では、toArray()
が実行されたタイミングで、はじめて map 処理が行われます。
実際に利用する際は、この評価タイミングの違いは、意識しておく必要があります。
参考
- コメント (Close): 0
- トラックバック (Close): 0
PHP 定義されている情報(クラス、関数、変数等)を取得する関数まとめ
- 2014-06-04 (水)
- PHP
PHP には、定義されているクラスや関数、変数などの一覧を取得する関数があります。
ここでは定義情報を取得できる関数群をまとめてみました。ここでは実行例として、Laravel アプリケーションのビューテンプレート(hoge.blade.php)で実行した内容を記載しています。
定義された情報を取得する関数群
get_defined_constants()
定義されている定数を連想配列として取得します。キーが定数名で、要素がその値となっています。
http://www.php.net/manual/ja/function.get-defined-constants.php
出力してみると、1771 個の定数がありました。内容を見ると、フレームワークやアプリケーションで定義されたものの他に、PHP本体や extension で多数の定数が定義されていることがわかります。
array (size=1771) 'E_ERROR' => int 1 'E_RECOVERABLE_ERROR' => int 4096 'E_WARNING' => int 2 ...
get_declared_classes()
定義されているのクラスの名前が配列として取得します。
http://www.php.net/manual/ja/function.get-declared-classes.php
304 個のクラスが定義されていました。
array (size=304) 0 => string 'stdClass' (length=8) 1 => string 'Exception' (length=9) 2 => string 'ErrorException' (length=14) 3 => string 'Closure' (length=7) ...
get_declared_interfaces()
定義されているインターフェイスを配列として取得します。
http://www.php.net/manual/ja/function.get-declared-interfaces.php
55 個のインターフェイスが定義されていました。
array (size=55) 0 => string 'Traversable' (length=11) 1 => string 'IteratorAggregate' (length=17) 2 => string 'Iterator' (length=8) 3 => string 'ArrayAccess' (length=11) ...
get_declared_traits()
定義されているトレイトを配列として取得します。
http://www.php.net/manual/ja/function.get-declared-traits.php
トレイトの定義が無かったので、サンプルとして Foo をトレイトとして定義しています。
array (size=1) 0 => string 'Foo' (length=3)
get_defined_functions()
定義されている関数を連想配列として取得します。
http://www.php.net/manual/ja/function.get-defined-functions.php
連想配列には2つのキーがあり、internal
には内部関数、user
にはユーザ定義関数が配列として格納されています。
ここでは、1,686個(!)の内部関数と74個のユーザ定義関数がありました。
array (size=2) 'internal' => array (size=1686) 0 => string 'zend_version' (length=12) 1 => string 'func_num_args' (length=13) 2 => string 'func_get_arg' (length=12) 3 => string 'func_get_args' (length=13) ... 'user' => array (size=74) 0 => string 'composerrequirea978da05ae47fd0758967870dd5a04f2' (length=47) 1 => string 'composerautoloadincludefile' (length=29) 2 => string 'crypt_random_string' (length=19) 3 => string '_swiftmailer_init' (length=17)
get_defined_vars()
全ての定義済の変数を連想配列で取得します。
http://www.php.net/manual/ja/function.get-defined-vars.php
連想配列のキーに変数名、要素が変数値となっています。
array (size=6) '__path' => string '/share/app/config/../views/login.php' (length=36) '__data' => array (size=4) '__env' => object(IlluminateViewEnvironment)[208] protected 'engines' => object(IlluminateViewEnginesEngineResolver)[202] ... protected 'finder' => object(IlluminateViewFileViewFinder)[207] ... ...
get_included_files() / get_required_files()
include または require で読み込まれたファイル名を配列として取得します。
http://www.php.net/manual/ja/function.get-included-files.php
255 個のファイルが読み込まれていました。get_required_files()
は、get_included_files()
のエイリアスとなっているので、実行結果はどちらでも同じです。
array (size=225) 0 => string '/share/public/index.php' (length=23) 1 => string '/share/bootstrap/autoload.php' (length=29) 2 => string '/share/vendor/autoload.php' (length=26) 3 => string '/share/vendor/composer/autoload_real.php' (length=40) ...
get_loaded_extensions()
コンパイル/ロードされているモジュールを配列として取得します。
http://www.php.net/manual/ja/function.get-loaded-extensions.php
58 個のモジュールが有効になっていました。
array (size=58) 0 => string 'Core' (length=4) 1 => string 'date' (length=4) 2 => string 'ereg' (length=4) 3 => string 'libxml' (length=6)
なお、get_loaded_extensions()
では、引数に真偽値を指定することができ、true
を渡すと、Zend 拡張モジュールのみを取得します。
実行してみると、下記の 2 つだけでした。
array (size=2) 0 => string 'Zend OPcache' (length=12) 1 => string 'Xdebug' (length=6)
ini_get_all()
設定値を連想配列として取得します。
http://www.php.net/manual/ja/function.ini-get-all.php
下記エントリで実行結果を記載していますので、ご参考まで。
http://qiita.com/shin1x1/items/f469bfb73c396007f911
使いどころ
色々と使いどころはあるのですが、便利な使い方を一つ。
フレームワークのビューテンプレートで、定義(バインド)されている変数をリストアップします。CakePHPやLaravelなどのフレームワークでは、ビューテンプレートをビュークラスのメソッドで読み込んで実行するので、ビューテンプレート内はこのメソッドのコンテキストで実行されることになります。
get_defined_vars()
を使うことで、実際にはどのような変数がビューテンプレートで定義されているかを確認できます。
下記が、Laravel ビューテンプレートでget_defined_vars()
を実行した例です。このビューテンプレートでは 6 つの変数が定義されており、$__path
、$__data
、$__env
、$app
、$errors
、$loginUser
として利用できることが分かります。
このように、マニュアルなどのドキュメントを見ずとも、コードで利用できる変数を知ることができます。
<?php var_dump(array_keys(get_defined_vars())) ?> array (size=6) 0 => string '__path' (length=6) 1 => string '__data' (length=6) 2 => string '__env' (length=5) 3 => string 'app' (length=3) 4 => string 'errors' (length=6) 5 => string 'loginUser' (length=9)
他には、クロージャ内でget_defined_vars()
を実行して、スコープにある変数がどれかを確認したり、PHPの挙動を知るのにも使えます。
さいごに
こういった定義を確認する関数群は日々使うというわけではありません。ただ、知っておくと、アプリケーションのデバッグや、フレームワークの挙動を確認したりする際に役立ちます。
日々開発しているPHPコードの定義情報を見てみると、新たな発見があるかもしれませんよ。
このエントリで紹介した関数群を書いたコード Gist に置いてます。参考まで。
追記
@shin1x1 コマンドラインですけどextension向けならphp –ri memcachedとかphp –rc memcachedとかよく使います。
— withgod (@withgod) June 4, 2014
このエントリでは、配列で取得する関数を取り上げましたが、コマンドラインでも取得できます。extension で定義されているクラスや設定を見るなら、コマンドの方が手軽ですね。
$ php -h ... --rfShow information about function . --rc Show information about class . --re Show information about extension . --rz Show information about Zend extension . --ri Show configuration for extension .
- コメント (Close): 0
- トラックバック (Close): 0
Home > アーカイブ > 2014-06
- 検索
- フィード
- メタ情報