6

我对在 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);
    }
} 

?>

然后我输出名称“Mike”和“Jennifer”:

示例 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();
}

?>

要么会打印“MikeJennifer”,但有人告诉我示例 A是错误的,“因为 Person 不是静态类”。

但是,一个类不能在 PHP 中声明为“静态”,那么它为什么重要呢?

4

1 回答 1

4

在“紧急设计”中,Scott L Bain 将其描述为抽象对象创建的第一步模式。

第一天:没有抽象...

$person = new Person($id);

第 2 天:为您构建对象的静态方法...

$person = Person::getPerson($id);

为什么?因为现在您的整个应用程序中只有一段代码知道如何“更新”一个人,而不是在具有该知识的整个应用程序中分布多行代码。如果您将来更改构建人员对象的方式,您将能够仅更改getPerson静态方法。

第 3 天+:您可能决定依靠对象构建器或存储库来创建对象。当您选择这样做时,您可以更新您的getPerson静态方法以使用构建器/存储库,并且更改再次发生在一个地方。

这被称为“凝聚力”。拥有无需打开大量文件即可进行更改的代码。

于 2013-07-04T22:01:47.307 回答