2013-10-20 21 views
0

這個設計概念是更好的PHP.Passing變量的函數myFunct()或不傳遞變量?PHP的方法和類設計

<?php 
class A{ 
    public $myvar=1; 
    public function myFunc($myvar){ 
    $this->myvar=$myvar+1; 
    } 
} 
$myA=new A(); 
$myA->myFunc($myA->myvar); 

// OR THIS ONE 

class A{ 
    public $myvar=1; 
    public function myFunc(){ 
    $this->myvar=$this->myvar+1; 
    } 
} 
$myA=new A(); 
$myA->myFunc(); 

?> 

這裏也許是什麼,我想了解一個更好的例子:

class PhotosBasicClasses{ 
    protected $srcImage;  
    protected $fileImageTypeFlag;  
    public function createThumb($srcImage,$fileImageTypeFlag){  
     $this->srcImage=$srcImage; 
     $this->fileImageTypeFlag=$fileImageTypeFlag; 
     $resourceNewImage=$this->imageCreateFromFormat($srcImage,$fileImageTypeFlag); //with or without the parameters is better?! 

    } 
    protected function imageCreateFromFormat($srcImage,$fileImageTypeFlag){ 
     switch($fileImageTypeFlag){ //this is my problem: would be better to use the class variable or the internal variable($fileImageTypeFlag or $this->fileImageTypeFlag) 
      case 'jpeg': return imagecreatefromjpeg($srcImage);break; 
      case 'png': return imagecreatefrompng($srcImage);break; 
      case 'gif': return imagecreatefromgif($srcImage);break; 
      default: return "error source file format"; 
         } 
} 
+0

如果方法myFunc只需要將內部屬性增加1,則不需要將內部屬性傳遞給它 –

+0

這只是一個簡單的概念。我擔心的不是我如何增加一個變量,我關心的是關於課程設計 –

+0

沒有這樣的「課程設計」。取決於您需要實現的目標是使用不同的模式 –

回答

2

通常保留在類作用域變量描述你的類,並通常需要你的大部分「重要」(方法也說明類可以做或有)的方法。

乍一看,在你的情況下,方法imageCreateFromFormat($srcImage,$fileImageTypeFlag)看起來很好,自我包含。但方法createThumb如果它所做的只是您發佈的內容,請將其與兩個類變量一起除去,並將其他方法重命名爲createThumb。

如果未完成並調用方法imageCreateFromFormat將裁剪圖像並創建縮略圖,則沒有理由讓類範圍變量可以刪除它們,除非您打算重命名該類並添加一堆使用這兩個變量的方法。

最後,要小心類名,使用複數和單詞類不是好習慣。

+0

感謝您的建議。我猜不知何故我希望imageCreateFromFormat()函數可以從外部訪問,而不是必須的類內部方法。在這種情況下,也許我應該在imageCreateFromFormat($ path,$ type)中聲明變量。例如:$ o = new PhotosBasicClasses(); $ o-> imageCreateFromFormat('images /','jpeg'); –

+0

@Olegalex我認爲你應該公開這些函數並刪除類變量。當你調用這些函數時,你會像剛剛顯示的那樣傳遞變量的值。也嘗試修改類的名稱。 – melc

1

無論這樣的例子還是不錯的。如果你想擁有對象變量,最好把它變成私有的。

順便說一句,你的例子是做不同的任務,因爲第一個通過函數params獲得變量增加一個並保存到對象變量,第二個例子只增加一個對象變量。

而不是「$ this-> myvar = $ this-> myvar + 1;」你可以使用「$ this-> myvar ++;」