2011-08-02 174 views
0

我是OOP的新手。我创建了这个名为Site的类,该类扩展了许多其他具有常见查询和特性的类。 这个特定的类“分页”,我需要从其他实例访问其方法,并访问发送给它的“内部”数据。这可能是坏的写法,但我想要一些帮助。php5访问另一个类的对象

<?php 

    class Site { 
     public $lang; 
     public $user_agent; 
     public $user_lang; 
     public $url; 
     public $bots; 

     public $total_items; 
     public $itemsPerPage; 
     public $page; 

class Products extends Site {  
      function getProducts($last = false, $id = false, $cat = false, $active_only = false, $lang_pref = false, $itemsPerPage = false, $page =false){ 

      //code 

      //prepare paging 
      if(!empty($itemsPerPage)){ 

       //count total product 
       $count = mysql_query(
       "SELECT COUNT(*) 
       FROM products_list 
       "[email protected]$cat_to_choose." 
       "[email protected]$lang." 
       ") 
       or die(mysql_error()); 

       $count = mysql_fetch_row($count); 
       $total_items = $count[0]; 

       // set vars for Pagination class 
       $this->total_items = $total_items; 
       $this->itemsPerPage = $itemsPerPage; 
       $this->page = mysql_real_escape_string($page); 

       //send data to class Pagination 
       $pagination = new Pagination(); 
       $start = $pagination->createPagination(); 

       $limit = "LIMIT ".$start.", ".$itemsPerPage; 

      } 

         //code 
     } 




      //other classes 

    class Pagination extends Site { 


     function createPagination(){ 

      // get total pages by dividing 
      $this->total_pages = $this->total_items/$this->itemsPerPage; 

      //round to highest integer 
      $this->total_pages= ceil($this->total_pages); 

      switch($this->page){ 
       case "0": 
       case null: 
       case "1": 
        $start = 0; 
        break; 
       default : 
        $start = ($this->page-1)*($this->itemsPerPage); 

        break; 

      } 

      return $start; 

     } 

     public function htmlPagination(){ 
      if($this->page == 0){ 
       $this->page = 1; 
      } 
      $pagination = array(
        "total_pages" => $this->total_pages, 
        "current_page" => $this->page, 
        "total_items" => $this->total_items 
      ); 

      return $pagination; 

     } 

    } 
    } 

PHP代码

$products_object= new Products(); 
$products = $products_object->getProducts(false,false,$cat, true, $site->lang, $itemsperpage, @$_GET["pag"]); 

一旦我这样做,我怎么访问htmlPagination与产品实例处理这些数据?

回答

1

您可以将分页设置为产品对象的字段,并使用get方法或将其定义为public并直接读取。

产品有:

class Products 
{ 
    ... 
    private $pagination; 

    public function getProducts(...) 
    { 
     ... 
     $this->pagination = new Pagination(); 
     ... 
    } 

    public function getPagination() 
    { 
     return $this->pagination; 
    } 
} 

再后来:

$product->getPagination()->htmlPagination(); 

检索HTML分页。

+0

问题是我对其他类也使用分页方法 –

+0

他们每个人都可以实现这样的方法。 – Dan