簡體   English   中英

PHP:具有共享方法的方法鏈接

[英]PHP: Method chaining with shared methods

這是我一段時間以來一直在考慮的事情。 我想將一組方法鏈接在一起,如下面的示例所示。
方法鏈接的概念毫不費力,但是我想要的是通過相同的add方法添加所有動物,那么我應該如何確定在add方法中添加的動物類型呢?

$zoo = new Zoo;
$lion = $zoo->lion->add('Lucas the lion');
$cockatoo = $zoo->cockatoo->add('Chris the cockatoo');

class Zoo {

    function add($name) {
        //How to figure out if the animal is a Lion or an Cockatoo?
    }

}

由於我們在談論面向對象的設計,因此實現層次結構將更加“正確”和靈活,例如:

interface IAnimal {}
class Lion implements IAnimal {}

class Zoo
{
    private $animals = array();

    public function add(IAnimal $animal)
    {
        $this->animals[] = $animal;
        return $animal;
    }
 }

 $zoo = new Zoo();
 $lion = $zoo->add(new Lion('Lucas'));

解決該問題的一種方法是重寫Zoo類中的__get返回“ creator”類。

function __get($animal){
    return new Creator($this, $animal);
}

然后,讓創建者類在zoo類中調用add函數。

class Creator{
    public function __construct($zoo, $animal){
    ....
    }
    public function add($details){
        $zoo->add($this->_animal, $details);
    }
}

這種解決方案相當丑陋,而且從未來的開發人員的角度來看,還不清楚。 正如評論中指出的那樣,有更好的方法可以做到這一點。 做類似的事情:

$zoo->add('lion', 'whatever')

要么

$zoo->add( new Lion('Whatever') )

可能是一個更好的解決方案,我認為其他開發人員很清楚正在發生什么。 (因為您不知道確切的操作細節,所以可能對您而言並非如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM