2012-05 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
今まで参加した勉強会で一番実践的だったと思います。
もちろん私にとって。
とか言いつつ、20 分くらい遅刻してしまいましたw
第2回 関西PHP勉強会 [2011-11-26-3] で一度聞いてはいましたが、それで
も知らないことは多々ありました。
レイト・スタティック・バインディングがサポートされた。static:: が
C++ とかと同じように動作する。self::who じゃなくて static::who と
書くと、継承先の who() が使われる。
goto がサポートされた。loop の中には入れない。
クロージャがサポートされた。
クラススコープ外で const を使えるようになった。define は APC 使った
時に実行されてしまう。const はそうじゃないらしい。
省略三項演算子がサポートされた。フォームのデフォルト値を処理するの
に便利とのこと。さっそく試してみた。確かにこれは便利。
// セットされていれば、その値が使われる。 $aaa = 'masutaka'; $value = $aaa ?: 'aaa'; var_dump($value); //=> string(8) "masutaka" // されていなければ、デフォルト値('aaa')が使われる。 $aaa = 0; $value = $aaa ?: 'aaa'; var_dump($value); //=> string(3) "aaa"
Traits がサポートされた。早く使おう。
Class が垂直再利用なのに対して、Traits は水平利用とのこと。なるほど。
Ruby だと mixin に相当するとのこと。Module かと思ってた。
こんな風に Class と同様に利用できる。
trait foo {} class bar { use foo; }
Traits を使えば __get() や __set() [2012-05-13-1] をきれいに実装で
きるとのこと。
Trait を複数使う場合の文法もある。
関数の名前を変えたり、public を private に変えたり出来る。
Trait から Trait を作ることも出来る。
abstract で抽象メソッドを作れたりもする。
CLI Server(ビルドインサーバー)がサポートされた。
php -S 127.0.0.1:1080 とかで、Web サーバを起動できる。
便利だけど正式運用は厳しい。php が落ちたら web server も落ちるから。
watch dog 必須。
ショートタグがサポートされた。
<?= ?>
が常に利用可能。今までも php.ini で設定できたそう。
<?= h('') ?>
とかも書ける。
Ruby っぽい配列文法がサポートされた。
今まで何度も何度も要望があがっていたが、今回ようやく実装されたのは
echo foo()[1]; を書きたい要望があったためだそう。なるほど。
バイナリ記法がサポートされた。
0b1111 とか。
パッチは必要だが Facebook の Hiphop Virtual Machine が内々にサポー
トされたそう。PHP のコードを C++ に変換するアレですね。
http://php-ninja.com/
WordPress x nginx x Zcloud
発表者は @miya0001 さん。
PHP-Ninja はめっちゃ速い。5000-8000 req/sec 処理可能とのこと。
普通のレンタルサーバは 20 req/sec
高負荷時に CPU のコアをダイナミックに増減。これはすごい!
http://wp.remotemanager.me/
複数の WordPress を一元管理 (3サイトまで無料)
あとで忍者の一人に聞いてみたら、独自ドメインにはまだ対応してないそう。
AWS SDK for PHP
AWS の各種サービスを PHP で操作する SDK
PHP を使って、システム運用の自動化も。
DynamoDB を使った、HTTP のセッション共有が可能
SDK にクラスが同封
AWS 使ったことないですが、これも早く使いたいですね。
CentOS6.2にPHP5.3.9とMySQL5.5を導入 - OSSDBwiki
MySQL native driver for PHP (mysqlnd_ms)
オリジナルより速い。
5.4 から本家に取り込まれるかも。
MySQL 向けのロードバランサ
PHP から送られてきたクエリーを更新もしくは検索かを判断して、
マスター/スレーブに自動的に振り分ける。
設定ファイルは json
プログラムは一切変更する必要がないので、Cake とかでも動くはず。
確認は出来てないけど。導入は低コスト。
クリティカルな場面ではマスターに処理を投げたい時もあるはず。
プログラムで制御できるのか? 今のバージョンでは出来るかも?
プログラム側はいっさい変更せずに MySQL のロードバランサが使えるのは
よいですね。導入が低コストなのも○
生の @cakephper さんを初めて拝見。
懇親会でいろいろお話しすることも出来ました〜
Cake2 では autoload が賢くなったそう。
Cake1 App::import()
Cake2 App::users()
CakeEmail
EmailCompornent と違って、utf8 決めうちではない。
これはめっちゃ助かります。
CakePHP2.1
JsonView/XMLView の追加
View の継承機能
CakePHP2 本が今年の 7 月にでるそう。これは..買おうかな?
たしかにインストールはめっちゃ簡単。3コマンドで終了。@omoon がすご
く楽しそうに発表しているので、ちょっと使いたくなってしまいました。
メモ取ってなかったので、LT は割愛。。
モックオブジェクトは是非使ってみたいです。
今回は自分に関係ある発表ばかりだったので、かなり役に立ちました。
今後はもっとテスト関係の発表を聞きたいかなあ。調べてもなかなか情報
が出てこなくて。(もちろん cake 以下とかのテストコードは見てます。)
懇親会はヤバかったですねw
LT って、短いと何回もループさせられるものだったとは。。
有名人の方々ともお話しできて良かったです。
@shin1x1 さんはじめ、運営の方々ありがとうございました!
関連情報: はてなブックマーク - マスタカのはてなブックマーク - PHP - 勉強会
RTM(Remember The Milk)へページを簡単に登録するブックマークレット - エンジニアが作る最新ITブログ by DODA
ここにあるAdd to RTM!ブックマークレットだと、URLとか登録できないからいやなので、
m.rememberthemilk.com経由で登録するブックマークレットを作って使っている。
たしかに Add to RTM! ブックマークレットにはもう少し頑張って欲しいですね。
ってことで私も作りました。
javascript:(function(){var%20cp='http://m.rememberthemilk.com/add?name='+document.title+ '&due=Today&url='+document.location; var%20w=window.open(cp,'addwindow','status=no,toolbar=no,width=475,height=260,resizable=yes'); setTimeout(function(){w.focus();},500);})(); // 可読性を良くするために複数行にしています。ブックマーク登録時には 1 行にしてください。
- サイトのタイトルをタスク名にセットしています。
- 期日は今日決めうちです。リストへの振り分けは後でやるからです。
- サイトの URL を URL にセットしています。
- フォーカスを「タスクを追加」に合わせたいのですが、よく分かりませんでした。
ブックマークに追加する時にニックネームを設定すると便利です。
私は r にしました。
Shift-F2 -> r の操作でこのブックマークレットのウィンドウが開きます。
参考情報: Remember the Milkを便利に使う7つのツール|Nomad Worker Style
class に public な変数(プロパティ)を定義することは、オブジェクト指
向のカプセル化の観点から論外ですが、private なプロパティを定義して、
get_プロパティ名(), set_プロパティ名() とかを作るのもイケてなかった
のですね。(薄々気づいてはいましたが...。)
PHP には __get() と __set() という特殊メソッドがあります。
例えば
$myclass = new MyClass;
$myclass->hoge = 1;
の場合、定義していれば MyClass::__set() が呼ばれます。
以下のように private なプロパティを定義し、__get(), __set() を介し
てアクセス制御すると良いでしょう。このプロパティは読み取り専用、こ
のプロパティは両方大丈夫とか。
class Post { private $title; private $content; private $author; private $comments; private $_getters = array('title', 'content', 'author', 'comments'); private $_setters = array('title', 'content', 'author'); public function __get($property) { if(in_array($property, $this->_getters)) { return $this->$property; } if(in_array($property, $this->_setters)) { throw new Exception('Property "' . $property . '" is write-only.'); } throw new Exception('Property "' . $property . '" is not accessible.'); } public function __set($property, $value) { if(in_array($property, $this->_setters)) { $this->$property = $value; return; } if(in_array($property, $this->_getters)) { throw new Exception('Property "' . $property . '" is read-only.'); } throw new Exception('Property "' . $property . '" is not accessible.'); } } $post = new Post; $post->title = "タイトルだよ〜ん\n"; //=> エラーが発生することなく、代入できる。 print_r($post->title); //=> エラーが発生することなく、「タイトルだよ〜ん」と表示される。 $post->comments = "コメントだよ〜ん\n"; //=> エラーが発生することなく、代入できる。 print_r($post->comments); //=> 例外が発生する。PHP Fatal error: Uncaught exception 'Exception' with message 'Property "comments" is read-only.'
プロパティによっては、加工してから get/set したいものもあるかもしれ
ません。その場合も __get(), __set() を拡張すれば良いです。PHP マニュ
アルのオーバーロードの項が参考になると思います。ただし、今回参考に
したコードは間違っているので、注意が必要です。。。
PHP 5.4 からは trait が使えるので、trait 化して自作の各 class に組
み込むと良いと思います(まだ環境を作ってないので、未確認..)。
2012-05 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31