我对PHP中正确使用静态方法有点不清楚。
在以下场景中:
<?php
class Person
{
public $data;
public function __construct($id)
{
// Fetch record from our data source
switch($id){
case 1:
$this->data = array('id'=>1, 'name'=>'Mike');
break;
case 2:
$this->data = array('id'=>2, 'name'=>'Jennifer');
break;
default:
exit('Record not found!');
}
}
public function getName()
{
return $this->data['name'];
}
public static function getInstance($id)
{
return new self($id);
}
}
?>
然后我输出名字&#34; Mike&#34;和&#34;詹妮弗&#34;:
示例A
<?php
foreach(array(1,2) as $id)
echo Person::getInstance($id)->getName();
?>
示例B
<?php
foreach(array(1,2) as $id){
$person = new Person($id);
echo $person->getName();
}
?>
要么打印&#34; MikeJennifer&#34;,但我被告知示例A 错误,&#34;因为Person不是静态类&#34;。
不能宣布课程&#34;静态&#34;但是在PHP中,为什么它重要呢?
答案 0 :(得分:3)
在“Emergent Design”中,Scott L Bain将此描述为抽象对象创建的第一步模式。
第1天:没有抽象......
$person = new Person($id);
第2天:为您构建对象的静态方法......
$person = Person::getPerson($id);
为什么呢?因为现在您在整个应用程序中只有一段代码知道如何“新建”一个人,而不是在整个应用程序中分配有许多代码,这些代码都具有这些知识。如果您将来更改构建人物对象的方式,则可以只更改getPerson
静态方法。
第3天:您可能决定依靠对象构建器或存储库来创建对象。当您选择执行此操作时,您可以更新getPerson
静态方法以使用构建器/存储库,并再次在一个位置进行更改。
这被称为“凝聚力”。拥有代码,您无需打开大量文件即可进行更改。