Ruby VS PHP ～それぞれのコードを書いてみた～

## はじめに
* 普段は会社ではRubyを中心に触っていて、興味があってPHPのお勉強もはじめたのでコードを並べてみた
 * 直感的にはよく似ているなぁと感じた。どっちがいいとかではなく
 * あとはRubyに比べてPHPはセミコロン書くときに違和感があったのと、なんせ$（ドル）をたくさん書くこと

## フレームワーク
* RubyもPHPもどちらも提供されている
 * Ruby ・・・ Ruby on Rails
 * PHP ・・・ CakePHP

## 実行方法
* Ruby

```
$ ruby hoge.rb # ファイルを指定して実行
$ irb          # コマンドプロンプト上で対話形式で実行
irb(main):001:0> puts "hello, ruby!"
hello, irb!
=> nil
```

* PHP

```
$ php hoge.php # ファイルを指定して実行
$ php -a       # コマンドプロンプト上で対話形式で実行
php > echo "hello, php!";
hello, php!
```

## コードを並べてみよう
### 数値

```rb:hoge.rb
puts 1 + 0.25 # => 以下、どれも結果は1.25
puts '1ABC'.to_i + '0.25'.to_f
```

```php:hoge.php
echo 1 + 0.25; # => 以下、どれも結果は1.25
echo '1' . '.25';
echo 1 + .25;
echo '1ABC' + '.25';
```

### 文字列

```rb:hoge.rb
str = 'Hello'; # 変数に文字列を代入
puts str + 'World' # 変数に文字列を連結して出力
puts "#{str}, Ruby!!" # => HelloWorld, Ruby!!
puts '#{str}, Ruby!!' # => #{str}, Ruby!!(シングルクオートは式展開なし)
``` 

```php:hoge.php
$str = 'Hello'; # 変数に文字列を代入
echo $str . 'World'; # 変数に文字列を連結して出力
echo "{$str}, PHP!!" # => HelloWorld, PHP!!
echo '{$str}, PHP!!' # => {$str}, PHP!!(シングルクオートは式展開なし)
```

### 配列/ハッシュ

```rb:hoge.rb
arr = ['TOKYO', 'OSAKA', 'KYOTO']
puts arr # => a
         #    b
         #    c
hash = { 'TOKYO' => 'EAST', 'OSAKA' => 'WEST', 'KYOTO' => 'WEST' }
puts hash # => { "TOKYO" => "EAST", "OSAKA" => "WEST", "KYOTO" => "WEST" }
```

```php:hoge.php
$arr = array('TOKYO', 'OSAKA', 'KYOTO');
print_r($arr);      # => Array
                    #    (
                    #        [0] => TOKYO
                    #        [1] => OSAKA
                    #        [2] => KYOTO
                    #    )
$ass_arr = array('TOKYO' => 'EAST', 'OSAKA' => 'WEST', 'KYOTO' => 'WEST')
print_r($ass_arr);  # => Array
                    #    (
                    #        [TOKYO] => EAST
                    #        [OSAKA] => WEST
                    #        [KYOTO] => WEST
                    #    )

# array_mergeの挙動(同じ数値キーを持つときはインデックスがはり直される)
$a = array('a'); # => Array( [0] => a ) # $aと$bは同じ数値のキーを持つ 
$b = array('b'); # => Array( [0] => b )
print_r(array_merge($a, $b)); # => Array
                              #     (
                              #        [0] => a
                              #        [1] => b
                              #     )

# array_mergeの挙動(同じ文字列キーを持つときは上書きされる)
$a = array('alp' => 'a'); # => Array( [alp] => a ) # $aと$bは同じ文字列のキーを持つ 
$b = array('alp' => 'b'); # => Array( [alp] => b )
print_r(array_merge($a, $b)); # => Array
                              #    (
                              #        [alp] => b
                              #    )

# array_mergeと「+」演算子(array_mergeは再インデックスされる)
$a = array(1 => 1);
$b = array(100 => 100);
print_r($a + $b);             # => Array
                              #    (
                              #        [1] => 1
                              #        [100] => 100
                              #    )
print_r(array_merge($a, $b)); # => Array
                              #    (
                              #        [0] => 1
                              #        [1] => 100
                              #    )
```

### ループ処理

```rb:hoge.rb
# each文
(1..3).each {|i| puts i}
# => 1
#    2
#    3
['hoge', 'foo'].each do |str|
  puts str
end
# => "hoge"
#    "foo"

# each_key(each_valueは対象がkeyでなくvalueになるだけなので省略)
{'apple' => 'red', 'banana' => 'yellow'}.each_key do |k|
  puts k
end
# => "apple"
#    "banana"
```

```php:hoge.php
# for文
for($i = 0;$i < 10;$i++) {
  # 処理
}

# foreach文
$arr1 = array('value1', 'value2');
foreach($arr1 as $v) {
  echo "key: {$v}\n";
}
# => key: value1
#    key: value2

$arr2 = array('key1' => 'value1', 'key2' => 'value2');
foreach($arr2 as $k => $v) {
  echo "key: {$k}, value: {$v}\n";
}
# => key: key1, value: value1
#    key: key2, value: value2
```

### おわりに
* クラスとか様々なメソッドとかについても書いていこうと思ったけど力尽きてしまったw
* 結論、どちらもかいていて面白かった^o^

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください