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