我看到在我们的PHP应用程序中实现为隐式事实标准的getter和setter代码,大意是项目类中的每个实例变量都可能是公共的。
每次打开课程时,我都不希望在代码中看到每个实例变量的getter和setter列表。它们通常是我看到的第一件事,通常它们的长度超过了课堂的核心内容,除了设置和获取之外的其他东西,所以我必须花一分钟时间像一个在吸气剂海洋中的布偶滚动制定者,特别是当他们这样安排时:
$this->getter();
$this->setter();
$this->actualstuff();
$this->getter();
$this->setter();
$this->getter();
$this->getter();
$this->setter();
$this->actualstuff();
$this->getter();
$this->setter();
当我在我的死亡床上时,我会意识到我的生命中有一半会被浪费在寻找安装者和吸气者身上,所以我试图呼吁我的同事在完成实例变量时不自动生成它们习惯并让他们毫无意义地依赖。
这里的问题是我的同事喜欢它们出现在IDE(我们使用PHPstorm)代码完成中,这使得在输入时更容易。
我想知道是否有一种技术可以让getter代码完成并不会使用魔术方法。也许是phpstorm插件或PHP类。
class Product{
private $price;
private $amount;
public function toGetter(){
$return = array();
$return['price'] = $this->price;
$return['amount'] = $this->amount;
$getter = new GetterObject($return); //Hypothetical solution class
return $getter;
}
}
$Product = new Product();
$Product->toGetter()->getPrice(); //appears in PHPstorm code completion
我会采取任何其他建议。
答案 0 :(得分:1)
在最糟糕的情况下,吸气剂和固定剂的实际样板是如此常见,以至于在阅读时很容易撇去并且使代码更容易推理,如果不是无聊的话。
在最好的情况下,扩展课程会成为孩子的游戏并且更容易阅读。大多数代码,特别是在更大的代码库中是Write Once,Read Many(不经常更改),因此实现getter和setter所花费的额外时间不会经常在单个类中重复,并且使用配置良好的IDE作为Vim,或像PHPStorm这样的IDE,无论如何这都不是问题。
答案 1 :(得分:0)
如今,我首选的工作方式(至少对于域代码而言)是完全不让设置者使用(不变性),并生成“ getter”作为流利的人类可读语言表达[1]。
该想法与Can IntelliJ generate getters without the "get" prefix?中的想法基本相同。
如果要为PhpStorm(2019.2)进行配置:
转到Settings > Editor > File and Code Templates
(可选)将Schema: Default
切换为Schema: Project
与下面的速度代码段相比,您可以将Code > PHP Getter Method
替换为
/**
* @return ${TYPE_HINT}
*/
public ${STATIC} function $NAME.substring(0,1).toLowerCase()$NAME.substring(1)()#if(${RETURN_TYPE}): ${RETURN_TYPE}#else#end
{
#if (${STATIC} == "static")
return self::$${FIELD_NAME};
#else
return $this->${FIELD_NAME};
#end
}
[1] V. Vernon,《实现域驱动设计》,Addison-Wesley Professional,2013年,第1页。 246。