More Related Content
PSR-1 と PSR-2 を5分でざっくり理解する What's hot (19)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight) Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう Modern PHP Programming @ PFI Seminar phpspecで学ぶLondon School TDD 最新PHP事情 (2000年7月22日,PHPカンファレンス) お前は PHP の歴史的な理由の数を覚えているのか 【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方 Viewers also liked (9)
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。 脆弱性もバグ、だからテストしよう PHPカンファンレス2015 Similar to 知ってるようで意外と知らないPHPの便利関数 (20)
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012 GMO TECHNOLOGY BOOT CAMP2015(PHP編) 「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~ Mojoliciousをウェブ制作現場で使ってみてる Livesense tech night immutable-js at a glance 速くなければスマフォじゃない - インターンバージョン- Perl 6 Object-Oliented Programming More from Wataru Terada (11)
CakePHP の Cookbook に翻訳貢献する方法と vagrant 知ってるようで意外と知らないPHPの便利関数
- 8. <?php
$input = "1abc";
if ($input == 1) { echo "NG!!!!"; }
これはNG!!!! が出力される。
なぜ?
- 9. <?php
$input = "1abc";
if ($input == 1) { echo "NG!!!!"; }
キャストされるから。
さけるには=== を使う。
左右のどちらかが文字列でない場合、
== は危険。
- 12. $var = '0';
empty($var); //←これはtrue
文字列の'0' が空だと
判定されることを忘れないこと。
- 14. 配列の+ とarray_merge は何が違う?
<?php
$a1 = [ 'a' => 1, 'b' => 2, 3 ];
$a2 = [ 'b' => 4, 'c' => 5, 6 ];
var_export($a1 + $a2);
var_export(array_merge($a1, $a2));
この結果は違う?
- 15. 【+の場合】
array (
'a' => 1,
'b' => 2, //先勝ち
0 => 3,
'c' => 5,
//先勝ちで6無し
)
→ key/index どちら
でも常に先勝ち
【array_merge の場合】
array (
'a' => 1,
'b' => 4, //後勝ち
0 => 3,
'c' => 5,
1 => 6, //勝手に連番
)
→ key なら後勝ち
index なら連番
$a1 = [ 'a' => 1, 'b' => 2, 3 ];
$a2 = [ 'b' => 4, 'c' => 5, 6 ];
- 17. 【+の場合】
array (
0 => 1,
1 => 2,
2 => 3,
)
【array_merge の場合】
array(
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
5 => 6,
$a1 = [1,2,3];
$a2 = [4,5,6];
※おそらく混乱するので
)
配列の+ は使わない方が良い。
- 21. <?php
$str = "aaa<br/>bbb<br/>ccc";
$res = explode("<br/>", $str);
var_export($res);
array (
0 => 'aaa',
1 => 'bbb',
2 => 'ccc',
)
- 23. <?php
$str = "aaa<br/>bbb<br>ccc";
$res = preg_split('/<br¥/?>/', $str);
var_export($res);
array (
0 => 'aaa',
1 => 'bbb',
2 => 'ccc',
)
- 25. <?php
$str = "aaa<br/>bbb<br>ccc";
$res = preg_split('/(<br¥/?>)/', $str,
null, PREG_SPLIT_DELIM_CAPTURE);
var_export($res);
array (
0 => 'aaa',
1 => '<br/>',
2 => 'bbb',
3 => '<br>',
4 => 'ccc',
)
- 27. <?php
$str = "aaa<br/>bbb<br>ccc";
$res = str_split($str, 5);
var_export($res);
array (
0 => 'aaa<b',
1 => 'r/>bb',
2 => 'b<br>',
3 => 'ccc',
)
- 29. <?php
$str = 'aaa,"b,b,b","c""c""c"';
$res = str_getcsv($str, ',', '"');
var_export($res);
array (
0 => 'aaa',
1 => 'b,b,b',
2 => 'c"c"c',
)
- 32. <?php
$str = "2014-10-27 19:00,ERROR:あいうえお";
$res = sscanf($str, '%10s %5s,%5s:%s');
var_export($res);
だが、"ERROR" 部分が可変長だと発覚!!
どうする?
array (
0 => '2014-10-27',
1 => '19:00',
2 => 'ERROR',
3 => 'あいうえお',
)
- 33. <?php
$str = "2014-10-27 19:00,ERROR:あいうえお";
preg_match('/^(.+?) (.+?),(w+):(.*)$/',
$str, $res);
var_export($res);
array (
0 => '2014-10-27',
1 => '19:00',
2 => 'ERROR',
3 => 'あいうえお',
)
これ、結果を連想配列で取れる?
- 34. <?php
$str = "2014-10-27 19:00,ERROR:あいうえお";
preg_match('/^(?<ymd>.+?) (?<hm>.+?),'
. '(?<type>w+):(?<msg>.*)$/', $str, $res);
var_export($res);
array (
0 => '2014-10-27 19:00,ERROR:あいうえお',
'ymd' => '2014-10-27',
1 => '2014-10-27',
'hm' => '19:00',
2 => '19:00',
'type' => 'ERROR',
3 => 'ERROR',
'msg' => 'あいうえお',
4 => 'あいうえお',
)
- 37. <?php
$ary = [1,2,3,4,5];
$res = array_chunk($ary, 2);
//$res: [[1,2],[3,4],[5]]
- 38. array_map
指定した配列の要素に
コールバック関数を適用する
http://jp1.php.net/manual/ja/function.array-map.php
array_walk
配列の全ての要素に
ユーザー定義の関数を適用する
http://jp1.php.net/manual/ja/function.array-walk.php
答えはドキュメントの中!
ヒント:引数と戻り値
- 39. array_map
array array_map ( callable $callback , array $array1 [, array $... bool array_walk ( array &$array , callable $callback [, mixed $userdata
array_walk
そう!
array_map は変更後の配列を作るためのもの
array_walk は自身を書き換えるためのもの
- 45. SPL編
Standard PHP Library (SPL)
(標準で入っているライブラリ)
http://jp1.php.net/manual/ja/book.spl.php
- 51. CallbackFilterIterator
イテレータにフィルタを適用する。
$ite = new ArrayIterator([1,2,3,4,5,6,7]);
$ite = new CallbackFilterIterator($ite,
function($current, $key, $iterator) {
return $current % 2 == 0;
}
);
foreach ($ite as $a) {
echo $a;
}
//246
- 54. - GitHub / Git (git-flow)
- PHPStorm
- CakePHP
- ユニットテスト/ Behat
- 継続的インテグレーション
- 将来は英語話せるようにサポート