2013-10-20 23 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 ++;”