2011-12-01 52 views
0

因此,我掀翻另一个古怪的翻译旧开发人员Perl脚本到 面向对象的PHP,这个小Perl参考语句让我抓我的头 相当长一段时间,但我一直无法找出通过Google或朋友。将Perl引用翻译为OO PHP?

我已尽全力写出我相信它的意思,但我不确定它是否为 没错。有人可以告诉我,如果我知道了,或者我没有了吗?提前致谢。

Perl的片段是:

!$state->{$msg->{hash}} 

我相信这意味着在OO PHP的两种的一个?

!$this->state[$this->msg['hash']] //or? 
$this->state != $this->msg['hash'] 

我甚至在球场?

UPDATE我被告知这是一个引用,而不是数组引用,但我不确定,因为$ msg - > {gray},$ msg - > {hash},$ msg - > {domain}等都存在于同一个子?

+0

我们需要更多的上下文来回答这个问题。什么是'$ state'? 'Data :: Dumper'是你的朋友。 – 2011-12-01 23:06:12

+0

Perl引用与PHP引用(别名)不同。我不知道是否可以使用PHP变量别名来模拟perl引用。 – hakre

+0

我相信我们可以最接近它将与在PHP中使用array()? – ehime

回答

1

实际上,在第二一目了然,$state是某种散列引用(尽管它也可以是一些类的bless ED对象),和$state->{$msg->{hash}}%$state对应于密钥$msg->{hash}(其值,在转,是对应于密钥"hash"%$msg的值)。

因此,假设$state$msg只是散列引用(而不是特定对象),它们实际上对应于PHP中的数组(其中一个关于PHP的非常愚蠢的事情是,数组和关联之间没有区别数组)。

因此,它将在PHP中为!$state[$msg['hash']]

+2

被祝福并不会改变它是一个hashref。但是如果将它从一个普通的hashref中修改出来的话,那么它就会是它的搭配。 (另外,我打算修改你的格式 - 如果我们碰撞,随意覆盖我的编辑) – derobert

+0

谢谢杰克花时间解开它。 – ehime