2013-06-11 32 views
0

我是新來的OOP的正確方法,並仍然是一個有點什麼是從方法類提取兩組數據

我創建了一個class`方法,將提取出兩組數據從概念混淆Zend_Session_Namespace的。我現在的問題是,我不知道如何提取這些數據,當它拉到另一種方法。

它可能是最好的,如果我告訴你我是什麼意思:

Public function rememberLastProductSearched() 
      { 
    $session = new Zend_Session_Namespace(searchedproducts); 

    if ($this->getRequest()->getParam('product-searched')) { 
    $session->ProductSearched = $this->getRequest()->getParam('product-searched'); 
    return " $session->ProductSearched"; 
    } else { 
    if ($session->ProductSearched) { 
    return " $session->ProductSearched "; 
    } 
    } 

    if ($this->getRequest()->getParam('search-term')) { 
    $session->SearchTerm = $this->getRequest()->getParam('search-term'); 
    return " $session->SearchTerm"; 
    } else { 
    if ($session->SearchTerm) { 
    return " $session->SearchTerm "; 
    } 
    } 

這個方法應該得到兩套數據即在

$session->SearchTerm 
$session->ProductSearched 

我的困惑是這樣的;我現在如何在另一個方法調用中提取兩組數據(即在同一個類中).i.e

以上是我嘗試提取信息的方法 - 但它不起作用。

或者,我是否應該將這些信息放入一個數組中 - 如果有的話,有人可以告訴我該怎麼做。

回答

0

看起來你要做的就是使用參數中的product-searchedsearch-terms,並將它們存儲在會話中(如果它們已設置),否則訪問先前保存的值。這將有助於看到你如何調用這個方法,但是我可能會稍微修改你的代碼來返回會話名稱空間對象,因爲它包含了這兩個值,不管它們是來自params還是已經存在:

public function rememberLastProductSearched() 
{ 
    $searchedProducts = new Zend_Session_Namespace('searchedproducts'); 

    if ($this->getRequest()->getParam('product-searched')) { 
     $searchedProducts->ProductSearched = $this->getRequest()->getParam('product-searched'); 
    } 

    if ($this->getRequest()->getParam('search-term')) { 
     $searchedProducts->SearchTerm = $this->getRequest()->getParam('search-term'); 
    } 

    return $searchedProducts; 
} 

我假設你有一個控制器類這種方法,所以你這樣稱呼它:

public function searchAction() 
{ 
    $searchedProducts = $this->rememberLastProductSearched(); 

    // do something with the values here 
} 

你再有$searchedProducts->ProductSearched$searchedProducts->SearchTerm兩個值。

+0

啊。那時。這對我來說確實很清楚。最後一個問題。 – andreea115

0

該行「return $ something;」將停止代碼執行並返回值。如果要返回多個值,則需要返回數組或使用兩個單獨的函數來返回值。如果你想返回一個數組,你可以這樣來做:

public function rememberLastProductSearched() { 
      $returnArray = array(); 

      $session = new Zend_Session_Namespace(searchedproducts); 

      if ($this->getRequest()->getParam('product-searched')) { 
      $session->ProductSearched = $this->getRequest()->getParam('product-searched'); 
      $returnArray['productSearched'] = $session->ProductSearched; 
      } else { 
      if ($session->ProductSearched) { 
       $returnArray['productSearched'] = $session->ProductSearched; 
      } 
      } 

     if ($this->getRequest()->getParam('search-term')) { 
      $session->SearchTerm = $this->getRequest()->getParam('search-term'); 
      $returnArray['searchTerm'] = $session->SearchTerm; 
     } else { 
      if ($session->SearchTerm) { 
      $returnArray['searchTerm'] = $session->SearchTerm; 
      } 
     } 

     return $returnArray; 
} 

在您的控制器或任何你想檢查這些值:

$lastSearch = $this->rememberLastProductSearched(); 
echo $lastSearch['productSearched']; // Product Searched 
echo $lastSearch['searchTerm'];  // Search terms 

但它可能是更清潔使用兩個功能

public function getLastProductSearched() { 
       $session = new Zend_Session_Namespace(searchedproducts); 

       if ($this->getRequest()->getParam('product-searched')) { 
       $session->ProductSearched = $this->getRequest()->getParam('product-searched'); 
       $returnValue = $session->ProductSearched; 
       } else { 
       if ($session->ProductSearched) { 
        $returnValue = $session->ProductSearched; 
       } 
       } 
       return $returnValue; 
} 

public function getLastSearchTerms() { 
       $session = new Zend_Session_Namespace(searchedproducts); 

       if ($this->getRequest()->getParam('search-term')) { 
       $session->SearchTerm= $this->getRequest()->getParam('search-term'); 
       $returnValue = $session->SearchTerm; 
       } else { 
       if ($session->SearchTerm) { 
        $returnValue = $session->SearchTerm; 
       } 
       } 
       return $returnValue; 

} 

而且你可以使用它們像這樣:

echo $this->getLastProductSearched(); // Product Searched 
echo $this->getLastSearchTerms();  // Search terms 

它將使您的代碼稍後更易於閱讀和調試。關於你的代碼的更多註釋。您可以通過使用||避免使用嵌套ifs。

if ($this->getRequest()->getParam('product-searched') || $session->ProductSearched) { 
    $returnValue = $this->getRequest()->getParam('product-searched') || $session->ProductSearched; 
} 

將實現同樣的事情:

if ($this->getRequest()->getParam('product-searched')) { 
      $session->ProductSearched = $this->getRequest()->getParam('product-searched'); 
      $returnArray['productSearched'] = $session->ProductSearched; 
      } else { 
      if ($session->ProductSearched) { 
       $returnArray['productSearched'] = $session->ProductSearched; 
      } 
      } 

希望這有助於!

+0

您好Joellord。感謝您的代碼。我今晚會詳細研究它。最後一個問題。我應該注意舊會話變量。我的意思是,如果用戶以前從未去過網站或搜索過產品,這意味着會話變量將返回一個負值。這不會錯誤嗎?是否有必要把$ session-> ProductSearched ='';在方法的開始? – andreea115

+0

對不起。這並沒有出現。我的意思是問 - 我是否需要在方法開始時初始化會話變量 - 以防萬一用戶以前從未去過網站? – andreea115

+0

它不會拋出錯誤,但函數將返回null;當你使用$ this-> getLastProductSearched()時,你可以測試一個空值,如果這是第一次訪問或你的用戶(例如將他重定向到搜索頁面),則執行一些操作。 –

相關問題