Чем отличаются Ruby и PHP в своих механизмах оценки? - PullRequest
1 голос
/ 22 мая 2009

Однажды я нашел статью с различиями между тем, как PHP и Ruby обрабатывают различные типы переменных, соответствующих определенным условиям тестирования (например, isempty, isset и т. Д.). Чем они отличаются?

Ответы [ 2 ]

2 голосов
/ 07 июня 2009

PHP / empty во многом совпадает с эквивалентом Ruby, empty? Для строк в Rails метод blank? предпочтительнее empty?

# this is PHP
$bob = array();          # empty( $bob ) => true
$bob = array( "cat" );   # empty( $bob ) => false

$bob = null;        # empty( $bob ) => true
$bob = "boo"        # empty( $bob ) => false
$bob = "";          # empty( $bob ) => true

# this is Ruby
[].empty?           # => true
[ "cat" ].empty?    # => false

nil.empty?          # => NoMethodError
"boo".empty?        # => false
"".empty?           # => true

PHP / isset можно заменить на has_key? для объекта Hash. Для общего использования локальной переменной Ruby создает переменные как nil, когда на них ссылаются в коде, поэтому единственное, что легко проверить, это то, являются ли они nil?

EDIT

Вы также можете использовать ключевое слово defined?, чтобы дублировать использование PHP isset для локальных переменных.

#PHP

isset($bob);        # => false
$bob = "foo";
isset($bob);        # => true

$bob =  array();
isset($bob['cat']);  # => false

$bob =  array( 'cat' => 'bag' );
isset($bob['cat']);  # => true
isset($bob['dog']);  # => false

#Ruby
bob                  # => nil
defined?(bob)        # => false
bob.nil?             # => true
bob = "foo"
bob                  # => "foo"
bob.nil?             # => "false"
bob = {}
bob.has_key? :cat    # => false
bob = { :cat => 'bag' }
bob.has_key? :cat    # => true

С одной вещью нужно быть осторожнее: в PHP пустая строка или числовой 0 будут иметь значение false в операторе if. В Ruby только nil и false оцениваются как ложные в операторе if. Это требует добавления еще двух булевых методов запроса, blank? и zero?. Эти методы смешиваются с классом String как часть приложения Rails. Отдельные их версии можно найти на Facets.

0 голосов
/ 22 мая 2009

Это очень размытый вопрос. Основное различие между Ruby и PHP состоит в том, что Ruby (в основном) строго типизирован , тогда как PHP очень слабо типизирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...