2014-08-28 72 views
0

我問我的問題,我想在PHP變量檢測必須是​​一個對象或數組...變量作爲對象和/或陣列

這是我的代碼: Dispatcher.php

<?php 
class Dispatcher { 
    var $request; 

    public function __construct(){ 
     $this->request = new Request(); 
     var_dump($this->request->query); 
    } 
} 

?> 

Request.php

<?php 
class Request { 
    public $query = false; 
    public function __construct(){ 
     if(!empty($_GET)){ 
     $this->query = array(); 
     foreach($_GET as $k => $v) { 
      $this->query[$k] = $v; 
     } 
     //I need help here for mix array and stdClass(); 
     } 
    } 
} 
?> 

我也想用$this->request->query['page'](陣列)和作爲對象:$this->request->query->page與stdClass的(); 但我不知道如何做到這一點?

感謝您的幫助... :)

(對不起我的英文不好,我是法國人;)...)

+0

只是一個想法:PHP有['ArrayAccess'(http://php.net/manual/en/class.arrayaccess.php)。這是你通過同一個變量獲得數組和對象訪問的唯一方法。實際上,這可能不值得麻煩。 (一個對象不適用於'array_map'等)只需選擇一個。 – cHao 2014-08-28 20:49:00

回答

0

使用的ArrayObject

$this->query = new ArrayObject($_GET, ArrayObject::ARRAY_AS_PROPS); 

// use it in dispatcher 
echo $this->request->query['page']; 
echo $this->request->query->page; 

// your also able to iterate 
foreach ($this->request->query as $key => $value) { 
    echo $key.'=>'.$value.'<br>'; 
} 
+0

非常感謝ArrayObject! – Phoenix 2014-08-28 20:57:31

+0

不客氣;) – bitWorking 2014-08-28 20:58:42

0

嘗試類似:

if(is_array($this->request->query)) 
{ 
    echo $this->request->query['page']; 
} 
elseif(is_object($this->request->query)) 
{ 
    echo $this->request->query->page; 
} 
else 
{ 
    echo "not array or object"; 
} 
+0

有沒有聽說過DRY?這傷害了我的眼睛。 – MightyPork 2014-08-28 20:44:44

+0

@MightyPork你的眼睛必須傷害缺少的分號,這不是因爲DRY不適用於此。 – 2014-08-28 20:56:15

+0

感謝你們倆!現在我知道Dry是什麼,我用分號糾正了我的行......(這是爲了表示is_array和is_object不是最佳代碼) – Juan 2014-08-28 20:57:29

0

您可以使用轉換將數組轉換爲對象(從PHP 5.4起,我認爲)。

對於對象(stdclass),它不會造成任何傷害。

$arr = array('foo'=>'bar'); 

$obj = (object) $arr; 

echo $obj->foo;