2013-10-10 36 views
-1

我正在使用函數在PHP中創建zip文件。然後我在另一個函數中調用該函數。調用未定義的函數?

我想不通爲什麼我收到以下錯誤:

Fatal error: Call to undefined function create_zip() in ...

的功能都是公共的,並且裏面的類,所以我不能弄明白。

這裏是文檔,我已刪除的爲簡單起見,所有其他職能的內容是:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Judging { 

    public $return_data; 

    public function __construct() 
    { 
     $this->EE =& get_instance(); 
    } 

    public function pre_judging_items() { 
    } 

    public function pre_judging_submission_accept() { 
    } 

    public function pre_judging_submission_decline() { 
    } 

    public function round_one_items() { 
    } 

    public function round_one_submission_decline() { 
    } 

    public function round_two_items() { 
    } 

    public function submission_form() { 
    } 

    public function counts() { 
    } 

    public function judged_list_singles() { 
    } 

    public function create_zip($files = array(),$destination = '',$overwrite = false) { 

     if(file_exists($destination) && !$overwrite) { return false; } 

     $valid_files = array(); 

     if(is_array($files)) { 
      foreach($files as $file) { 
       if(file_exists($file)) { 
        $valid_files[] = $file; 
       } 
      } 
     } 

     if(count($valid_files)) { 
      $zip = new ZipArchive(); 
      if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
       return false; 
      } 
      foreach($valid_files as $file) { 
       $zip->addFile($file,$file); 
      } 

      $zip->close(); 

      return file_exists($destination); 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public function judged_zip_singles() { 

     $sql = " 
      SELECT * 
      FROM (
       SELECT *, @rn:=IF(@prevCat=category_id, @rn + 1,1) rn, @prevCat:=category_id 
       FROM (
       SELECT sub.entry_id, sum(jud.stage_2) AS score, sub.member_group, sub.category_id, dat.field_id_48 as path 
       FROM exp_judging AS jud 
       JOIN (SELECT @rn:=0, @prevCat:=0) T 
       LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id 
       LEFT JOIN exp_channel_data AS dat ON dat.entry_id = sub.entry_id 
       GROUP BY jud.rel_id 
       ORDER BY sub.category_id, sum(jud.stage_2) DESC 
      ) T 
      ) T 
      WHERE rn <= 35 
     "; 

     $query = $this->EE->db->query($sql); 


     $items = array(); 
     foreach ($query->result_array() as $key => $row) { 
      $path = substr($row['path'], 11); 
      $items[] = $path; 
     } 

     $result = create_zip($items,'single-files.zip'); 

     print_r($result); 

    } 
} 

誰能明白我爲什麼會得到這個錯誤?

+0

你叫它作爲一個功能或判斷對象的方法?兩者差別很大。 –

+1

因爲它是一種方法,並且您正在像調用全局函數一樣調用它,而不會引用當前對象。 – mario

+0

由於create_zip是同一個類中的一個方法,因此您必須在其範圍$ this-> create_zip()中調用$ this, –

回答

4

您需要使用$this訪問內部judged_zip_singles()成員函數:

$result = $this->create_zip($items,'single-files.zip'); 
2
$result = $this->create_zip($items,'single-files.zip'); 
1

變化

$result = create_zip($items,'single-files.zip'); 

$result = $this->create_zip($items,'single-files.zip');