SlideShare uma empresa Scribd logo
1 de 58
2014/06/28 shin1x1
PHPカンファレンス関西2014
PHPコードではなく
PHPコードの「書き方」を知る
魚を与えれば、
その日をしのぐことはできる。
!
魚の釣り方を教えれば、
一生食べていくことができる。
PHPコードを知れば、
その場をしのぐことはできる。
!
PHPコードの書き方を知れば、
一生食べていくことができる。
PHPコードを知れば、
その場をしのぐことはできる。
!
PHPコードの書き方を知れば、
5年?食べていくことができる。
PHPコードの書き方を知ろう
PHPコードの書き方を知ろう
その前に!
$ php -v!
• 黒い画面で使うPHP
• PHP コマンド打つだけ( php ) で動く
• 余計なものが無いので、PHP言語を学ぶには良い
• 今後、検証にも使うので、実行できる環境を用意
(c) 2014 Masashi Shinbara @shin1x1
コマンドライン版PHP
(c) 2014 Masashi Shinbara @shin1x1
コマンドライン版PHP
!
$ php file.php!
• PHPファイル実行
!
$ php -r 'echo "Hellon";'!
• PHPスクリプト実行
• 最近の OSX には、PHP が標準添付
• OSX 10.9 = PHP 5.4.24
• ターミナルから実行
(c) 2014 Masashi Shinbara @shin1x1
Mac
!
$ /usr/bin/php -v
!
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
• windows.php.net からダウンロード
• Zip ファイルを展開する
• コマンドプロンプトで実行
(c) 2014 Masashi Shinbara @shin1x1
Windows
(c) 2014 Masashi Shinbara @shin1x1
今日のコード
http://bit.ly/phpkansai2014_B4
Are you
readey?
FizzBuzzに見る
PHPコードの書き方
(c) 2014 Masashi Shinbara @shin1x1
FizzBuzz とは
1から20までの整数を出力します。!
!
ただし、3で割り切れる場合は「Fizz」、5で割り切
れる場合は「Buzz」、3でも5でも割り切れる場合は
「FizzBuzz」を出力します。!
!
各項目を出力する際は改行コードを入れて下さい。
<?php!
for ($i = 1; $i <= 20; $i++) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
echo 'FizzBuzz' . PHP_EOL;!
} else if ($i % 3 === 0) {!
echo 'Fizz' . PHP_EOL;!
} else if ($i % 5 === 0) {!
echo 'Buzz' . PHP_EOL;!
} else {!
echo $i . PHP_EOL;!
}!
}
Sample1
$ php fizzbuzz.php!
1!
2!
Fizz!
4!
Buzz!
Fizz!
7!
8!
Fizz!
Buzz!
11!
Fizz!
13!
14!
FizzBuzz!
16!
17!
Fizz!
19!
Buzz!
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
FizzBuzz
処理
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
FizzBuzz
処理
1
2
Fizz
…
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
FizzBuzz
処理
1
2
Fizz
…
入力 出力処理
(c) 2014 Masashi Shinbara @shin1x1
入力・処理・出力が混在
<?php!
for ($i = 1; $i <= 20; $i++) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
echo 'FizzBuzz' . PHP_EOL;!
} else if ($i % 3 === 0) {!
echo 'Fizz' . PHP_EOL;!
} else if ($i % 5 === 0) {!
echo 'Buzz' . PHP_EOL;!
} else {!
echo $i . PHP_EOL;!
}!
}
(c) 2014 Masashi Shinbara @shin1x1
関数にする
• 処理 = evaluate()

FizzBuzz を返す
• 出力 = render()

改行付きで出力
<?php!
function evaluate($i) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
function render($output) {!
echo $output . PHP_EOL;!
}!
!
for ($i = 1; $i <= 20; $i++) {!
$fizzbuzz = evaluate($i);!
render($fizzbuzz);!
}!
Sample2
<?php!
function evaluate($i) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
function render($output) {!
echo $output . PHP_EOL;!
}!
!
for ($i = 1; $i <= 20; $i++) {!
$fizzbuzz = evaluate($i);!
render($fizzbuzz);!
}!
(c) 2014 Masashi Shinbara @shin1x1
自動テストで検証
• 目で行うチェックは間違う
• プログラムでプログラムをチェック
• 正確無比(残酷なまでに)
• 何度でも実行できる
$ php fizzbuzz.php!
1!
2!
Fizz!
4!
Buzz!
Fizz!
7!
8!
Fizz!
Buzz!
11!
Fizz!
13!
14!
Fizz!
16!
17!
Fizz!
19!
Buzz!
$ php fizzbuzz.php!
1!
2!
Fizz!
4!
Buzz!
Fizz!
7!
8!
Fizz!
Buzz!
11!
Fizz!
13!
14!
Fizz!
16!
17!
Fizz!
19!
Buzz!
15 = FizzBuzz
(c) 2014 Masashi Shinbara @shin1x1
PHPUnit
(c) 2014 Masashi Shinbara @shin1x1
PHPUnit
• PHPコードでテストを書ける
• デファクトスタンダード
• Composer でインストール
(c) 2014 Masashi Shinbara @shin1x1
PHPUnit
http://phpunit.de/manual/current/ja/installation.html
<?php!
class SampleTest extends PHPUnit_Framework_TestCase!
{!
/**!
* @test!
*/!
public function render()!
{!
$this->assertEquals('1', something());!
}!
}!
テストコード
something()の
戻り値が 1 か?
$ phpunit test/!
!
!
!
!
!
!
!
OK の時は、緑
$ phpunit test/!
!
!
!
!
!
!
!
!
!
!
!
!
!
NG の時は、赤
(c) 2014 Masashi Shinbara @shin1x1
FizzBuzzのテストを書く
• test/FizzBuzzTest.php
•fizzbuzz.php の出力をテスト
• expectedOutput()
<?php!
class FizzBuzzTest extends PHPUnit_Framework_TestCase!
{!
/**!
* @test!
*/!
public function render()!
{!
$expected = <<<EOT!
1!
2!
Fizz!
…!
Buzz!
!
EOT;!
!
$this->expectOutputString($expected);!
include __DIR__ . '/../fizzbuzz.php';!
}!
}!
出力をテスト
$ phpunit test/!
!
!
!
!
!
!
!
(c) 2014 Masashi Shinbara @shin1x1
クラスにする
• FizzBuzz クラス
• 関数をFizzBuzzクラスへ
• クラスファイルは別ファイルにする
<?php!
class FizzBuzz!
{!
public function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
public function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
<?php!
class FizzBuzz!
{!
public function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
public function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
<?php!
require_once __DIR__ . '/class/FizzBuzz.php';!
!
$obj = new FizzBuzz();!
!
for ($i = 1; $i <= 20; $i++) {!
$fizzbuzz = $obj->evaluate($i);!
$obj->render($fizzbuzz);!
}
FizzBuzz
クラスは
別ファイルに
$ phpunit test/!
!
!
!
!
!
!
!
(c) 2014 Masashi Shinbara @shin1x1
さらにクラスにまとめる
• publish() = FizzBuzz を出力
• 入力値をコンストラクタで渡す
<?php!
class FizzBuzz!
{!
protected $start;!
protected $end;!
!
public function __construct($start, $end)!
{!
$this->start = $start;!
$this->end = $end;!
}!
!
public function publish() {!
for ($i = $this->start ; $i <= $this->end ; $i++) {!
$fizzbuzz = $this->evaluate($i);!
$this->render($fizzbuzz);!
}!
}
Sample3
<?php!
class FizzBuzz!
{!
protected $start;!
protected $end;!
!
public function __construct($start, $end)!
{!
$this->start = $start;!
$this->end = $end;!
}!
!
public function publish() {!
for ($i = $this->start ; $i <= $this->end ; $i++) {!
$fizzbuzz = $this->evaluate($i);!
$this->render($fizzbuzz);!
}!
}!
!
protected function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
protected function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
<?php!
require_once __DIR__ . '/class/FizzBuzz.php';!
!
$obj = new FizzBuzz(1, 20);!
$obj->publish();!
シンプルなコードに
$ phpunit test/!
!
!
!
!
!
!
!
おさらい
(c) 2014 Masashi Shinbara @shin1x1
FizzBuzz とは
1から20までの整数を出力します。!
!
ただし、3で割り切れる場合は「Fizz」、5で割り切
れる場合は「Buzz」、3でも5でも割り切れる場合は
「FizzBuzz」を出力します。!
!
各項目を出力する際は改行コードを入れて下さい。
(c) 2014 Masashi Shinbara @shin1x1
問題を分解
1から20
FizzBuzz
処理
1
2
Fizz
…
入力 出力処理
<?php!
for ($i = 1; $i <= 20; $i++) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
echo 'FizzBuzz' . PHP_EOL;!
} else if ($i % 3 === 0) {!
echo 'Fizz' . PHP_EOL;!
} else if ($i % 5 === 0) {!
echo 'Buzz' . PHP_EOL;!
} else {!
echo $i . PHP_EOL;!
}!
}
混然一体となったコード
<?php!
class FizzBuzz!
{!
protected $start;!
protected $end;!
!
public function __construct($start, $end)!
{!
$this->start = $start;!
$this->end = $end;!
}!
!
public function execute() {!
for ($i = $this->start ; $i <= $this->end ; $i++) {!
$fizzbuzz = $this->evaluate($i);!
$this->render($fizzbuzz);!
}!
}!
!
protected function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
protected function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
処理を分離
<?php!
require_once __DIR__ . '/class/FizzBuzz.php';!
!
$obj = new FizzBuzz(1, 20);!
$obj->publish();!
1から20のFizzBuzzを出力
$ phpunit test/!
!
!
!
!
!
!
!
まとめ
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
まとめ
• 問題を分割して、小さく実装
• 関数やクラスでグループ化
• 自動テストは強い味方
(c) 2014 Masashi Shinbara @shin1x1
分割は容量と用法を守って
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1

Mais conteúdo relacionado

Mais procurados

Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
Yuki Shibazaki
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 

Mais procurados (20)

Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
AngularFireで楽々バックエンド
AngularFireで楽々バックエンドAngularFireで楽々バックエンド
AngularFireで楽々バックエンド
 
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker Works
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 

Destaque

レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Masashi Shinbara
 
全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4
真乙 九龍
 
PHPによるユニットテスト入門
PHPによるユニットテスト入門PHPによるユニットテスト入門
PHPによるユニットテスト入門
Hiromu Shioya
 

Destaque (20)

Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションレガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
 
全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]
 
PHPによるユニットテスト入門
PHPによるユニットテスト入門PHPによるユニットテスト入門
PHPによるユニットテスト入門
 
AWS初心者向けWebinar AWSクラウドでのWindowsの実行
AWS初心者向けWebinar AWSクラウドでのWindowsの実行AWS初心者向けWebinar AWSクラウドでのWindowsの実行
AWS初心者向けWebinar AWSクラウドでのWindowsの実行
 

Semelhante a PHPコードではなく PHPコードの「書き方」を知る

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundle
chobi e
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
 

Semelhante a PHPコードではなく PHPコードの「書き方」を知る (20)

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
php.js
php.jsphp.js
php.js
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundle
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論
 
Cakephp api
Cakephp apiCakephp api
Cakephp api
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
Okinawapm #1
Okinawapm #1Okinawapm #1
Okinawapm #1
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
Silex入門
Silex入門Silex入門
Silex入門
 
WPerのWPerによるWPerのためのPHP入門
WPerのWPerによるWPerのためのPHP入門WPerのWPerによるWPerのためのPHP入門
WPerのWPerによるWPerのためのPHP入門
 

Mais de Masashi Shinbara (10)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
サーバの防災訓練
サーバの防災訓練サーバの防災訓練
サーバの防災訓練
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHP
 

PHPコードではなく PHPコードの「書き方」を知る