Yöntem Zincirler PHP OOP

2 Cevap php

Genellikle, çerçeveler bir sürü, sorgu oluşturucu kullanarak bir sorgu oluşturma örneklerini bulabilirsiniz. Genellikle göreceksiniz:

$query->select('field');
$query->from('entity');

Ancak, bazı çerçeveler de bu gibi yapabilirsiniz

$object->select('field')
       ->from('table')   
       ->where( new Object_Evaluate('x') )
       ->limit(1) 
       ->order('x', 'ASC');

Aslında zincirlerinin bu tür nasıl yapabilirim?

2 Cevap

Bu denir Fluent Interface - Bir example in PHP bu sayfada var.

Döndürülen $this o, aynı sınıftan başka yöntemler çağırmak mümkün kılan - temel fikir, (that you want to be able to chain) sınıfın her yöntem döndürmek için $this olmasıdır .

Ve, tabii ki, her yöntem sınıfın geçerli örneğinin özelliklerine erişimi var - her yöntemi geçerli örneği "bazı bilgiler eklemek" anlamına gelir.

Temelde, sınıfta her yöntemi örneğini döndürmek yapmak zorunda:

<?php

class Object_Evaluate{
    private $x;
    public function __construct($x){
        $this->x = $x;
    }
    public function __toString(){
        return 'condition is ' . $this->x;
    }
}
class Foo{
    public function select($what){
        echo "I'm selecting $what\n";
        return $this;
    }
    public function from($where){
        echo "From $where\n";
        return $this;
    }
    public function where($condition){
        echo "Where $condition\n";
        return $this;
    }
    public function limit($condition){
        echo "Limited by $condition\n";
        return $this;
    }
    public function order($order){
        echo "Order by $order\n";
        return $this;
    }
}

$object = new Foo;

$object->select('something')
       ->from('table')
       ->where( new Object_Evaluate('x') )
       ->limit(1)
       ->order('x');

?>

Bu genellikle saf göz şeker olarak kullanılır ama ben buna da geçerli kullanımları vardır varsayalım.