Ruby和PHP在评估引擎方面有何不同?

时间:2009-05-21 21:25:48

标签: php ruby

我曾经发现一篇文章,其中PHP和Ruby如何处理与某些测试条件匹配的不同类型的变量(即:isempty,isset等)之间存在差异。他们有什么不同?

2 个答案:

答案 0 :(得分:2)

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,因此唯一容易检查的是它们是否为零?

修改

您还可以使用defined?关键字复制isset对本地变量的PHP使用情况。

#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将在if语句中评估为false。在Ruby中,只有nilfalse在if语句中求值为false。这需要添加两个布尔查询方法blank?zero?。这些方法作为Rails应用程序的一部分混合到String类中。可以在Facets上找到它们的独立版本。

答案 1 :(得分:-1)

这是一个非常分散的问题。 Ruby和PHP之间的一个主要区别是Ruby(大多数)是strongly typed,而PHP的类型非常弱。