PHP는 웹 애플리케이션에 널리 사용되고 있지만 Ruby on Rails를 사용하고 싶거나
일반적인 용도에 더 적합한 언어를 원한다면 Ruby를 살펴볼 가치가 있습니다.

### 비슷한 점

PHP처럼, Ruby에서도...

* Ruby는 PHP와 같이 동적 타입을 사용하므로 변수 선언에 대해 걱정할 필요가
  없습니다.
* 클래스가 있으며 PHP 5(`public`, `protected`, `private`)에서와 같이 클래스에
  대한 액세스를 제어할 수 있습니다.
* 일부 변수는 PHP와 동일하게 $로 시작합니다(전부는 아님).
* `eval`도 있습니다.
* 문자열 보간을 사용할 수 있습니다. `"$foo is a $bar"` 대신
  `"#{foo} is a #{bar}"`를 사용할 수 있습니다. PHP에서와 같이 작은따옴표
  문자열에는 적용되지 않습니다.
* 히어독(heredoc)이 있습니다.
* Ruby에는 PHP 5처럼 예외가 있습니다.
* 상당히 큰 표준 라이브러리가 있습니다.
* 배열 및 해시는 `array()`를 `{`, `}`로 교환하면 예상대로 작동합니다.
  `array('a' => 'b')`는 `{'a' => 'b'}`가 됩니다.
* `true` 및 `false`는 PHP처럼 동작하지만 `null`은 `nil`이라고 합니다.

### 다른 점

PHP와는 다르게, Ruby에서는...

* 강 타입을 사용합니다. 문자열, 정수 등을 변환하려면 언어에 의존하는 대신
  `to_s`, `to_i` 등을 호출해야 합니다.
* 문자열, 숫자, 배열, 해시 등은 객체입니다. `abs(-1)`을 호출하는 대신
  `-1.abs`입니다.
* 메서드 호출에서 괄호는 생략 가능합니다. 단, 어떤 매개변수가 어떤 메서드 호출로
  이동하는지 명확히 하는 경우는 예외입니다.
* 표준 라이브러리 및 확장은 모듈 및 클래스로 구성됩니다.
* 리플렉션은 객체 고유의 기능이므로 PHP 5에서와 같이 `Reflection` 클래스를
  사용할 필요가 없습니다.
* 변수는 참조입니다.
* `abstract` 클래스나 `interface`가 없습니다.
* 해시와 배열은 상호 교환할 수 없습니다.
* `false` 및 `nil`만 거짓입니다. `0`, `array()`, `""`는 조건문에서 모두
  참입니다.
* `raise`(PHP에서는 `throw`)를 포함하여 거의 모든 것이 메서드 호출입니다.
