2013-03-18 133 views
0

只是好奇哪種方式是正確的?將Java HashMap初始化器轉換爲PHP等效

// 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

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

對於第二個問題,在PHP中使用它之前,你不需要聲明一個'array',所以不需要,它不需要它。這可能是更好的做法。 – Tushar 2013-03-18 22:19:41

+0

是的,它會改變第二種方法(關聯的)來詢問if(empty($ this-> headers))// do stuff'而不是if == == NULL' – ehime 2013-03-18 22:22:23

回答

2

陣列有一個鍵值結構......這樣是正確的:

$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

+1。我也相信這是正確的,但是想看看是否有人不相信關聯數組是PHP的hashmaps和原因的等價物。我問的唯一原因是這是在類相關的OOP場景中。 – ehime 2013-03-18 22:14:04

+1

@愛姬夠公平。我想你知道有序的地圖位,但我也很驚訝地看到它們被實現爲HashTable。也許這對別人來說也會很有趣:) – Tushar 2013-03-18 22:17:43

+0

是的,我認爲這個特別的場景有趣值得問一下嗎? – ehime 2013-03-18 22:19:25