【问题标题】:Converting Java hashmap initializer to PHP equivalent将 Java hashmap 初始值设定项转换为 PHP 等效项
【发布时间】:2013-03-07 10:38:38
【问题描述】:

只是好奇哪种方式是正确的?

// the origional JAVA method
public void setRequestHeader(String key, String value) {
    if (this.headers == null) {
        this.headers = new HashMap<String, String>();
    }
    this.headers.put(key, value);
}

这应该在 PHP 中解释为

Class HashMap {}

/**
 * @return this
 */
public function setRequestHeader($key, $value) {
    if ($this->headers == NULL) {
        $this->headers = new HashMap();
    }
    return $this->headers->$key = $value;
}

....或....

/**
 * @return array
 */
public function setRequestHeader($key, $value) {
    if ($this->headers == NULL) {
        $this->headers = array();
    }
    return $this->headers[$key] = $value;
}

如果关联数组是正确的,我相信,是否需要在类的顶部声明这个变量?

// JAVA version
private HashMap<String, String> headers;

类似于

// PHP version
private $headers = array();

【问题讨论】:

  • 对于第二个问题,您不需要在 PHP 中使用它之前将其声明为 array,所以不,没有“需要”。不过,这可能是更好的做法。
  • 是的,它会将第二种方法(关联方法)更改为询问if(empty($this-&gt;headers)) // do stuff 而不是if ... == NULL

标签: java php hashmap associative-array stdclass


【解决方案1】:

PHP 中的数组具有键值结构......因此是正确的:

$this->headers[$key] = $value;

其实PHP手册上说:

PHP 中的数组实际上是一个有序映射。

http://php.net/manual/de/language.types.array.php

虽然根据How is the PHP array implemented on the C level?,它实际上是HashTable,这意味着您可以依赖O(1) 查找。

【讨论】:

  • +1。我也相信这是正确的,但想看看是否有人不相信关联数组是 PHP 的 hashmap 等价物,以及为什么。我问的唯一原因是这是在与类相关的 OOP 场景中。
  • @ehime 够公平的。我想你知道有序映射位,但读到它们被实现为 HashTable,我也很惊讶。也许这对其他人来说也会很有趣:)
  • 是的,我认为这个特殊的场景很有趣,值得一问?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 2018-12-07
  • 1970-01-01
  • 2011-04-26
相关资源
最近更新 更多