PHP といえば印象的なのは「歴史的な理由」 (≒黒歴史) の数々ですね。 このセッションでは、普段闇にこもっていてスポットの当たることの少ない「歴史的な理由」たちを引きずり出し、徹底追及し、頭を抱えていこうと思います。

この投稿はPHP Advent Calendar 2013の12日目の記事です。 PHP恒例行事の参照と三項演算子のdisりですが、そろそろあさってな議論はやめませんかという話です。 今年のPHP-dis大賞といえばこちら。 PHPとかいう糞言語|いんまのブログ ※ 追記: これ書かれたのは2012年でしたすんません。 なんで君たちそんなコードが必要なのかね、と。結論から先言うと、きみたちがPHPが使えないって思うのは、そんな挙動に左右されるようなコードを書くからでしょ、だからCとかRubyとかそういう簡単な言語でわかった気になっている初心者はまったくもう...というわけでPHPの言語文法の基礎んとこ、いきますね。 まず、PHPのarrayは「値」です。もちろん文字列も「値」です。値は値なんだけど、それはミュータブルです。PHPのarrayもしくは文字列の代入は、一見すると、ポインタを使わ
所要期間 着手しはじめたのが2010年12月ごろ、完了したのが2013年9月だったので何と3年近くかかったことになります。 長引いた原因は、日々の機能追加や運用をしながら孤独に片手間で細々とやってたからです。(単純に人手不足とも言う) また、PHPバージョンアップと同時にCentOSサーバを5から6にあげることにしたのでサーバ再構築のための工数も含まれています。 後半は仕事仲間が増えてその人が専業でバージョンアップ作業をやってくれたのでだいぶ楽できました。 それと専任のテスターさんたちにも参加していただいたので本番で大きなトラブルなく完了することができました。 感謝感謝です。 サーバ入れ替え作業が終わってPHP5.1の入った古いサーバを削除したときの、まさに「技術的負債」を返済し終わった瞬間の、あのスッキリ感、もう言葉にはできません。 終わってみてこの件に関するRedmineのチケットを数
先日の記事「PHPのジェネレータの実装を調べてみた」で僕は次のように書きました。 GeneratorクラスはIteratorインターフェースを実装しており、対応するPHPメソッドを持っています。また、Cで実装した場合のみ指定できるイテレータ関数も実装しています。このように両方が指定されている場合、foreachループではCの関数が呼ばれ、イテレータメソッドを明示的に指定した場合はPHPメソッドの方が呼ばれます。 ところで、イテレータに対応するPHPメソッドとC関数となぜ2つとも実装する必要があるのでしょうか。実は、PHPメソッドの方だけ実装すれば正常に動作します。C関数を実装する理由は速度面のメリットからだというのが僕の理解です。C関数は関数ポインタで単に呼び出せるのに対し、PHPメソッドの呼び出しは命令実行器の状態保存・復元の必要があるなど、呼び出しのコストがやや高いのです。 PHPのジ
Symfony2にも採用されているMonologは、HandlerやFormatterを差し替えることでログの出力先やフォーマットを自由に変更することが出来ます。PSR3に準拠しているライブラリですので、今後デファクトスタンダードになっていく気がします。 デフォルトだとStreamHandlerを使って出力されますが、Handlerを自作してFluentdに出力されるように変更してみます。バックエンドにはfluent-logger-phpを利用しました。 MonologのHandlerはAbstractProcessingHandlerを継承して作ります。 <?php namespace Acme\Handler; use Fluent\Logger\FluentLogger; use Monolog\Handler\AbstractProcessingHandler; use Monol
PHPカンファレンス2013で「PHPアプリケーションの継続的アップデート」というタイトルで話をしてきました。僕は、いまでこそPerlやRubyの人みたいな感じですが、もともとはPHPからプログラミングを始めたので、PHPカンファレンスで話すというのは、感慨深いものでした。「ぺちぺ」「ぺちぱー」という言葉の創始者でもありますし。 トークの内容は、最近仕事でやってきたことのまとめみたいな感じです。PHPといいながら、2/3ぐらいはPHPには直接関係ないことばかりでしたが。トーク中でもいったように、言語そのものというよりは、システムの複雑性をいかに減らすかが「継続的な」取り組みには必要なので、いたしかたありません。それなりに面白いものになっていると思います。 スライドは以下。 これまで『WEB+DB PRESS Vol.75』『入門Puppet - Automate Your Infrastr
本日、HASHコンサルティング株式会社セキュリティ・オペレーション・センター(HASH-C SOC)では、奇妙な攻撃リクエストを観測しました。それは、以下のようなURLによるものです。 http://example.jp/?s=/abc/abc/abc/$%7B@print(md5(base64_decode(MzYwd2Vic2Nhbg)))%7D/ s=以下をパーセントデコードすると下記となります。 /abc/abc/abc/${@print(md5(base64_decode(MzYwd2Vic2Nhbg)))}/ { } で囲まれた部分はPHPのスクリプトのように見えますが、2箇所文法違反があります。 MzYwd2Vic2Nhbg がクォートされていない } の前にセミコロンがない このうち、MzYwd2Vic2Nhbgのクォートに関しては @ 演算子によりエラー抑止され、'MzY
Run your PHP on Google's Cloud With the new PHP runtime for Google App Engine, you can now run PHP applications on Google's scalable, secure infrastructure. Register an app for the Limited Preview You'll need a Google App Engine account for this step. Sign up to Google App Engine first if you don't have one. Watch the in-depth I/O session ← Watch our live streamed presentation on the PHP runtime a
ついに仕事で触っている PHP のコードがほんの一部のテストとは言え CI に乗った。 正直これは感動ものだ。 今回はここに至るまでの長大な物語をダイジェストでお届けしようと思う。 有史以前PHP 3 で作られた 1 URI : 1 スクリプト + 共通関数 時代 当然のように PHP と HTML と SQL 混在まともなテスト環境がなかったので似た環境をどうにか作るパスとか絶対で埋め込みまくりなのでとりあえず共通のパス情報の変数に差し替えまくりテスト環境用のコードと本番環境用のコードが違うオール目視 つらかった。 みなさんの予想通りバージョン管理なんてものは存在しなかった。 素朴なPHPを徐々にclassにclass になれば phpdoc を書きやすくなるいきなり実行しないようにすればテストしやすくなる これは後から気づいたんだけど、結局フロントはロクに自動テストできてない一時期 p
はいタイトルは釣りです。 OOPのインターフェースはただの実装漏れチェック機能じゃないし、ましてや継承は差分プログラミングツールじゃないぞ。というのはわりと一般的な話だけど、Ruby(respond_to?でホントにいいの)とJava(インターフェースが自然すぎてユーザが意識しないのよ)が、PHPに対してOOPどうこうで偉そうに言うのはどうかなと思ったもので。まあそれと同時に、PHPの人自身がその意義を発見してるのかなという疑問もあったりしたんですけどね。 Rubyというのは「オブジェクト指向ってのはつまりメソッドに応答できるアヒルはみんなアヒルとみなせるよね」というレベルのダックタイピングで割り切った言語だと、個人的に認識しています。継承とミックスインにはis_aが応答するけど本質はrespond_to?のほうで、インターフェースを宣言してなくてもメッセージ送れたらいいあの感じ。 そんな
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く