2016/12/15 @ PHPカンファレンス2016再演 https://saien.connpass.com/event/45318/

みなさん、PHP書いてますか?ここ2ヶ月くらいPHPも書いていたのでその話を書きます。 この記事はVOYAGE GROUP techlog / Advent Calendar 2016の記事です。 例えば以下のような話に身に覚えはありませんでしょうか。 例外がどこかで握りつぶされており、例外的状況なのにエラー表示がまちまち。レスポンスステータスも一貫性がない。エラーログが適切に出ていない。 エラーログ出力用コードがいろんなところで散乱している。エラー文字列整形のための適当なヘルパメソッドがクラスごとに実装されている。 エラーごとにエラー表示のためのメッセージを設定するのが面倒になり、「システムエラーが起きました」とだけ表示されるようになってしまった。 例外ハンドリング周りのコードは考えるのが面倒なのでコピペだらけになっている。 オブジェクトの依存関係がクラスのプロパティに大量に埋め込まれて
この機能が全盛期だった頃、残念ながら私は PHP を書いていませんでしが、おそらくこの機能が ON になっていることで「うわ、何も考えなくても勝手に変数として使える!便利だ!!」みたいな、 よしなにやってくれる という PHP 特有の機能でもダントツのものだったと思います。 しかし、上のコードを見ていただけるとわかるとおり、ある程度複雑化したアプリケーションがこの register_globals 前提の設計をしているとどうなるでしょう。「この変数 Where from?」としか思えないわけです。修正が困難になり、ソウルジェムが濁り、飯が食えなくなる。つらい。 もちろんセキュリティ的にもよろしくないということで有名です。 register_globalsをonとした場合、この機能により、HTMLフォームから投稿される変数と同時に、あらゆる種類の変数がスクリプトに注入されることになります。こ
このガイドはPSR-1に準拠し、標準的なコーディング規約のためのスタイルガイドです。 このガイドの目的は、複数メンバーがコードを読む際の認識のずれを抑えることです。 これはPHPコードをどのような書式にするかについて、ルールや期待値を共有することで実現します。 スタイルルールは、様々なプロジェクトの共通内容から生み出されています。 様々な作者が複数プロジェクトを横断して協力しあうことで、全てのプロジェクトで有用なガイドライン策定の助けとなります。 従って、このガイド本来の利点は、ルール自体にはなくルールを共有することにあります。 文書内記載されている "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" 及び "OPTIONAL" は、RFC 21
昔あったphpspecが進化したものなのかそれとも別のものなのかは知りませんが。 すごい。軽くキモい。17分の動画です。 Laracasts | PHPSpec is So Good まず、いきなり「MovieCollectionにMovieをadd()するとcountが1になること」というのスペックを書きます。MovieCollectionクラスもMovieクラスもまだ作ってません。 phpspec runを実行すると当然失敗して、「MovieCollectionクラスが無いけど作ってほしい?」と尋ねてきます。Yなら空のMovieCollectionクラスが作られます。 関係ないけどこういうスクリーンキャストを作ったりライブコーディングする人は、ターミナルの色の設定したほうがいいですね。GitHubにいろいろカラーテーマがあるので。 その後いろいろ説明を省きますが、今度は「MovieCo
配列、連想配列といったデータの集まり - 集合に対する操作は、日々のプログラミングにおいて頻繁に記述するコードの1つです。その一方で、旧来の愚直なループを使った集合操作はコードを複雑にする大きな要因となります。これに対処するために、Microsoftは統合言語クエリ:LINQ(Language-Integrated Query)を開発しました。LINQ to Objectsのページには、LINQを使うメリットとして次のように説明があります。 本質的に、LINQ to Objects は、コレクションを扱うための新しい方法です。 従来の方法では、複雑な foreach ループを記述して、コレクションからどのようにデータを取得するかを指定する必要がありました。 LINQ を使用する場合は、何を取得するかを表す宣言コードを記述します。 また、LINQ クエリには、従来の foreach ループと
PHPのコレクション処理ライブラリUnderbar.phpの紹介 こんにちわちわ。 以前に便利なVimのOperatorをマスターするを書きましたemonkakです。 今回は私が個人的に開発を進めていて以前に社内勉強会で発表しました、PHPのコレクション処理ライブラリのUnderbar.phpの紹介をしたいと思います。 PHPのarrayなんとか関数は使い勝手が悪い PHPには配列処理のための関数がたくさんありますが、array_map()の引数の順番が変だったりarrayがそもそもオブジェクトではないのでメソッドチェインができなかったり使い勝手が良くありません。 $xs = range(1, 10); $twice = function($n) { return $n * 2; }; array_slice(array_map($twice, $xs), 0, 3); // [2, 4,
最近xhprof使い始めたのですがインストールまではよく紹介されてたのですが、数値の意味まで解説してなかったので簡単にまとめます。 installsudo pecl install xhprof-beta peclでインストールする場合、まだベータ版しかないのでパッケージ名の後ろに"-beta"を付ける必要があります。 動作までは解説されてる記事がよくあるのでそちらを参考に PHPのプロファイラー「XHProf」の使い方 PHPプロファイラー XHProf プロファイル画面 表の項目について FunctionName コールされた関数名Calls コールされた回数Calls% 全体のコール回数に対する割合Incl. Wall Time その関数全体の処理時間IWall% 全体の実行時間に対する割合Excl. Wall Time その関数から呼ばれた関数の実行時間を除外した、関数の純粋な処理
なんだか突発的に盛り上がってる facebook ですが、アプリが気になっていじってみました。mixi アプリは PC 版がクローズドオープンだった頃にお遊びでいくつか公開していたのだけど、それより格段に手軽かつ自由度が高いなぁ、という印象です。 で、日本語で解説しているページがほとんどなさそう&あってもなんだか古そうなので丁寧めに以下書いてみるよ。言語は PHP ですぞー。 facebook アプリを登録 マイアプリケーション一覧:http://www.facebook.com/developers/apps.php に移動し、右上にある「新規アプリケーション登録」をクリック 名前を適当に決めて登録(あとで変更可能) 登録できたら、そのアプリの「設定を編集」をクリックすると、以下のような画面になるはず。ここの「Facebook Integration」タブをクリック アプリの URL と
これは注目!様々なタイプのCAPTCHAが作れるPHPライブラリ「Securimage PHP CAPTCHA」 2009年09月30日- Securimage PHP CAPTCHA - Free PHP Captcha Script 次のように、実に様々なタイプのCAPTCHAが作れるPHPライブラリ「Securimage PHP CAPTCHA」というのがあるみたい。 一種類のタイプだと解析していくと比較的簡単に破られてしまうのかもしれませんが、これならよりセキュアにCAPTCHAを実装できそうです。 ドキュメントなんかもしっかりしているようで導入も簡単そうです。 Ajax と session を使って実装しているようです。クイックスタートガイドはこちら 関連エントリ PHPで独自CAPTCHAを作るチュートリアル これは新しい妹CAPTCHA「妹認証」 PHPで使えるCAPTCHA
「追記とか」にコメントの返答や追記をしてますので合わせてどうぞ。 かれこれ3年くらいPHPをやっているので、せっかくなので10個の便利な関数を並べてみました。 作業効率がかなりアップするので、これからPHPをやってみようかなぁって思う方は知っておくと便利だと思います。 変数、配列の内容をキレイに表示する関数「d」 変数や配列の内容をHTML構文でキレイに表示してくれます。 しかも、var_dumpと書くとタイピングが大変なので「d($hoge)」として簡単に記述。 これだけでも作業効率8倍 function d() { echo '<pre style="background:#fff;color:#333;border:1px solid #ccc;margin:2px;padding:4px;font-family:monospace;font-size:12px">'; foreac
PHP では以下のように new してすぐメソッドを呼べない <?php new DateTime()->getOffset(); なので、引数をそのまま返す関数を作ってやると <?php function expr($a) { return $a; } expr(new DateTime())->getOffset(); // OK! 便利だなー おまけ 配列アクセス用のも作っておくと便利 <?php function expr($a) { return $a; } function idx($array, $i) { return $array[$i]; } echo idx(idx(expr(new DateTimeZone('Asia/Tokyo'))->getTransitions(), 0), 'abbr') . "\n"; おまけ2 無名関数をそのまま呼ぶときにも使える。 <
#釣りっぽいタイトルですが大まじめです via. PHP 逆引きレシピ - 肉とご飯と甘いもの @ sotarok で、 @ (エラー制御演算子といいます!)はねーよ的な話をしましたが、著者の方から、「@に対して批判的になる理由が記載されていない」とのメールをいただきました。確かにその通りでした。実は理由を下書きのときには書いたのですが、長くなってしまったので削ってポストしたのですが、かえってわかりづらくなってしまいましたね.すみません。 ということで、PHPプログラマが、エラー制御演算子「@」使うべきでない 5 つの理由を述べます. 始める前に、本質的なところ 色々理由はつけようと、やっぱり前回述べた、 終的に$qに入るものが同じであることと、コードとして同じ意味であるかは、別じゃないでしょうか。 が一番本質的な話で、それ以上の話ではありません。 つまり、発生する可能性があるとわかってい
PHPプログラムを解析して何処が重いか?がブラウザ上で簡単に分かる「XHProf」 2009年03月25日- XHProf Documentation (Draft) PHPプログラムを解析して何処が重いか?がブラウザ上で簡単に分かる「XHProf」。 通常、PHPでのプロファイリングというと、Xdebugでファイルを吐き出して、WinCacheGrindやKCacheGrindで読み込むというのが定番です。 ですが、この方法だと、ファイルを吐き出したファイルをGETして、ソフトに読み込ませる、というちょっと面倒な手順が必要でした。 XHProf を使えば、ブラウザ上で、プロファイリングが出来るみたいです。 XHProfの特徴 まず、セグメントごとの実行時間やメモリ利用の状況なんかがブラウザで見れます。 プログラムの構造を把握するのにも使えます。 プロファイリングの階層表示 2つのプロファ
現在携わっているプロジェクトでは、単体テストを始め、最終的な出力結果(XML)のテストなど、いろいろな粒度のテストをPHPUnitを使って書いてます。ようやく1ヶ月ちょっと経ったところで、 77クラスファイル(*.class.php) 256 Tests 876 Assertions な感じで、テストはすべてパスし、コードカバレッジは95%強ぐらいをキープしてます。 で、最近思い始めたのは 質を上げるためにテスト作るんじゃなくて、 テスト作ると質を上げ*られる*ということです。デグレードしない(しても気づきやすい)という意味で、質が「上がる」というのもあるかと思いますが。また、「テストを作りさえすれば質が上がる」みたいな印象がありますがそうではない、ということです。 今のところ、 ざっくりクラス設計をする(クラス名とメソッドの定義とか) テストを書く 実装する テストを通す リファクタリン
昨日のオフの流れで、「第1回 LOCAL PHP部 (aka PHP北海道) のつどい 」に行ってみました。 一時間遅れで行ったので、本当に次回以降参加の下見でしたが。 後半は参加者の自己紹介となったのですが、 参加者の傾向が 「普段は他の言語を扱っていて、PHPも(言語としては微妙だが)勉強してみよっかな」 というプログラマと 「いやー、仕事で必要になっちゃってこれから勉強です」 というデザイナーにきっちり二分されていて、PHPらしく興味深かったです。 この状況を受けて主催の人は 「プログラミング初心者のデザイナーさんたちに、これからのPHP部の傾向に求めるものを聞いてみたい」 と言いました。でも、まだ教本を読んでいる段階の人だと、そもそも自分が何に疑問を持っているのかというのもわからないものです。 私は、まだまとまったアプリケーションは作れませんが
via. http://webbingstudio.blog10.fc2.com/blog-entry-564.html、PHPに関して1つだけ言っとくとすれば - iakioの日記、感想書くまでが勉強会ということで書く - bobchinの日記、自分なりに - WebProgを極めて居酒屋を開発する 第1回 LOCAL PHP部 (aka PHP北海道) のつどいに参加していないけど、回答書いてみますよ、と。 そもそも、PHPは何がどう「駄目な言語」なのか やはり「気持ちよく書けない(言語仕様)」ということになるんでしょうかねぇ。感覚的にこう書きたいけど書けないというか、回りくどく書かなきゃいけないというか。まあ、それに慣れてしまってるので、あまり目くじらたてたりしませんが、たまに思います。 問題がある関数とはどれのことを指すのか バージョン毎に挙動(動作とか引数とか戻り値とか)が変わる
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く