PHP方法与类设计

PHP方法与类设计,php,oop,Php,Oop,PHP中哪种设计理念更好;将变量传递给函数myFunct()还是不传递变量 <?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 func

PHP中哪种设计理念更好;将变量传递给函数myFunct()还是不传递变量

<?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();

?>

这两个例子都不好。如果您想要对象变量,最好将其设置为私有

顺便说一下,您的示例正在执行不同的任务,因为首先通过函数params获取变量,然后将其递增1,然后保存到对象变量,第二个示例仅将对象变量递增1


您可以使用“$this->myvar++;”而不是“$this->myvar=$this->myvar+1;”

通常将描述类的变量保留在类范围内,这些变量通常是大多数“重要”(也描述类可以做什么或拥有什么)方法所必需的

乍一看,在您的例子中,方法
imageCreateFromFormat($srcImage,$fileImageTypeFlag)
看起来很好,而且是独立的。但是方法
createThumb
如果它所做的只是您发布的内容,那么将其与两个类变量一起删除,并将另一个方法重命名为createThumb

如果未完成,并且调用方法
imageCreateFromFormat
后将裁剪图像并创建缩略图,则没有理由让类作用域变量删除它们,除非您计划重命名该类并添加一组使用这两个变量的方法


最后,必须注意类名,使用复数和单词class是不好的做法。

如果方法myFunc只需要将内部属性增加1,则不需要将内部属性传递给它。这只是一个简单的概念。我关心的不是如何增加一个变量,我关心的是类设计——没有这样的“类设计”。根据你需要达到的目标,你正在使用不同的模式感谢你的建议。我想我希望imageCreateFromFormat()函数也可以从外部访问,而不一定是类的内部方法。在这种情况下,也许我应该在imageCreateFromFormat($path,$type)中声明变量。例如:$o=新的PhotosBasicClass()$o->imageCreateFromFormat('images/','jpeg')@Olegalex我认为应该公开函数并删除类变量。当您调用函数时,您将传递刚才显示的变量值。同时尝试修改类的名称。
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";
                        }
}