2012-01-01 33 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