2012-01-01 32 views
1

這是我正在學習的課程。使用表單上傳文件後,員額的PHP文件,其中包含這個類:這些類屬性是多餘的嗎?

class Parse 
{ 
    public $file; 

    public function __construct() 
    { 
     echo 'The class was initiated!<br />'; 
    } 

    public function setFile($file) 
    { 
     if (sizeof($file) == 1) 
     { 
      $this->file = $file; 
     } 
    } 

    public function getFileName() 
    { 
     return $this->file['uploadedfile']['name']; 
    } 

    public function getFileTempName() 
    { 
     return $this->file['uploadedfile']['tmp_name']; 
    } 

    public function getFileSize() 
    { 
     return $this->file['uploadedfile']['size']; 
    } 
} 

我應該直接引用$ obj->文件[「UploadedFile的」] [「財產」]就像我如何創造的Getters,還是應該創建一堆公共類屬性,如public $filename,並將$ _FILES變量中的值存儲到單獨的類屬性中?

哪個是最佳做法?

使用答案EDITED

此代碼的工作完美:

<?php 

    class Parser 
    { 
     public $file; 

     public function __construct() 
     { 
      echo 'The class was initiated!<br />'; 
     } 

     public function setFile($file) 
     { 
      if ($_POST) { 
       if ($file['uploadedfile']['size'] > 0) { 
        $this->file = $file; 
       } else { 
        echo "File not uploaded!<br />"; 
       } 
      } else { 
       echo "The form was not submitted!<br />"; 
      } 
     } 
    } 

    ################ 
    # test area 
    ################ 



    $obj = new LoLParser; 
    $obj->setFile($_FILES); 

    ?> 

回答

1

鑑於$_FILES是一個超全局變量,可在所有範圍, 你真的不獲得任何 有一些特別的通過將其存儲爲類屬性而獲得小的收益。把它作爲課堂內容的可讀性可能會有一些好處。正如評論中指出的那樣,它還爲模擬單元測試的數據提供了一條途徑。

但是,在我看來,創建$_FILES的getter方法似乎增加了不必要的複雜性和混淆。 Getters對於在類之外公開私有或受保護的屬性非常有用,但在訪問超級全局時用處不大,因爲無論如何您都無法保護超全局的內容。

+0

通過將行爲包裝在課堂中,您獲得了兩個潛在的(相關)好處:現在這是可注射和可嘲弄的。 – 2012-01-01 22:56:15

+0

@OliCharlesworth我會同意嘲笑,但仍然沒有看到注入超級全球的目的。 – 2012-01-01 22:57:06

+0

好吧,它消除了以前直接訪問超級全局的依賴。 – 2012-01-01 22:58:08