PHP sınıf değişkenleri depolamak için en iyi yolu nedir?

5 Cevap php

Şu anda benim PHP sınıf değişkenleri böyle kurdunuz:

class someThing {

    private $cat;
    private $dog;
    private $mouse;
    private $hamster;
    private $zebra;
    private $lion;

    //getters, setters and other methods
}

Ama aynı zamanda tüm değişkenleri saklamak için tek bir dizi kullanarak insanlar gördüm:

class someThing {

    private $data = array();

    //getters, setters and other methods
}

Hangi neden kullanmayalım, ve do? Her birinin avantajları ve dezavantajları nelerdir?

5 Cevap

Genellikle, önce diğer insanlar zaten burada belirttiğimiz nedenlerden dolayı daha iyidir.

Eğer özel bir sınıf üzerinde veri depolamak gerekiyor, ancak veri üyelerinin ayak izi bilinmeyen Ancak, sık sık 2 örnek __ () __ onlar özel depolanan olduğunuzu gizlemek için () kanca set olsun birlikte görürsünüz.

class someThing {

    private $data = array();

    public function __get( $property )
    {
        if ( isset( $this->data[$property] ) )
        {
        	return $this->data[$property];
        }
        return null;
    }

    public function __set( $property, $value )
    {
        $this->data[$property] = $value;
    }
}

Sonra, bu sınıfın nesneleri stdClass bir örneği gibi kullanılabilir, set üyelerinden sadece hiçbiri aslında herkese açık

$o = new someThing()
$o->cow = 'moo';
$o->dog = 'woof';
// etc

Bu teknik kullanımları vardır, fakat __ get () ve __ set () doğrudan halka özelliklerini ayarlayarak daha yavaş 10-12 kez sipariş olduğunu unutmayın.

Eğer kullanıyorsanız private $data; sadece açıkça nasıl bir sınıf çalışmaları sergiyi eğer bunları hayatınızı çok kolaylaştıracak belirten ... Orada bir veri aşılmaz damla var.

Bu 2. yöntem ile çalışmak için gitmiyor - Diğer bir faktör otomatik tamamlama ile bir IDE kullanmak olduğunu.

Kod tekrarlayan ise, diziler ve (foreach) döngüler şeyleri neaten. Kodunuzda "hayvan" kavramı, tekrarlayan olup olmadığını karar vermeniz gerekir, ya da kod her üyesinin teklik kazmak gerekiyorsa.

Birden fazla kez kendimi tekrar etmek varsa, ben döngü.

  • Eğer bu değişken ihtiyaç biliyorum zaman ilk yöntemini kullanın.
  • Dinamik değişken ihtiyaçları olduğunda ikinci yöntem (değişkenler bir dizi toplama) kullanın.

Bu 2 yöntem birleştirmek, böylece başkaları dinamik iken bazı değişkenler, sınıfın içine yazılır. Kodlanmış değişkenler sihirli yöntemler ile karşılaştırıldığında tercih olacaktır.

Birkaç nedenden dolayı, ilk yöntemi tercih:

In a good IDE, the class properties show up, even if private/protected It's easier to see what has already been defined, reducing the chance you store the same information twice. If the proverbial bus hits you on the way home, it's a lot simpler for another developer to come in and read your code. And while it doesn't apply to private var, it does to protected vars, in classes that extend this class, you really should try to avoid the second method for pure readability.

Ben özel kılmak için çok özel bir neden yoksa da, bir yan not olarak, ben hemen hemen her zaman özel korumalı üzerinde seçin.

Ben bir şey bir tür birçok koleksiyonu depolama eğer ben muhtemelen ikinci yöntemi kullanmak istiyorum sadece zaman oldu.