uygun şekilde tüm kullanıcılar OOP kullanılarak olsun

8 Cevap php

ive bir kullanıcı i adını alabilirsiniz sınıfı, kullanıcının doğum tarihi vb ... (aşağıda) var

class user {
    private $id;
    private $name;
    private $dob;
    private address;

    function __construct($id) {
         $this->id = $id
    }

}

Ben sadece tüm kullanıcıları almak için ne iyi uygulama merak ediyordum. i veritabanından bulunan her kullanıcı için bu sınıfın bir nesne almak için bir işlevi oluşturmak mı? : S

8 Cevap

Tamamen OO açısından bakıldığında, kullanıcı veritabanları vb bilgiye sahip olmamalıdır

Benim ilk düşünceler veritabanına konuşmak ve SQL sonuçlarından kullanıcı nesneleri oluşturmak için nasıl bilecek bir UserFactory olacaktır. Sen may bir SQLUserFactory, bir XMLUserFactory vs var bu uzmanlaşmak istiyorum

Bu Factory desenleri hakkında okumaya değer. Fabrikalar nesnelerin yaratılması bakmak. Bu senaryoda, daha sonra Kullanıcı nesnelerinin farklı türleri ayırt etmek isteyebilirsiniz. Bu senaryoda Kullanıcı, değil oluşturmak için nesnenin ne tür karar fabrikasının sorumluluğu olacaktır.

Bu Active Record bir girişim gibi görünüyor. Php Active Record dahil birkaç ORM uygulamaları vardır. Ben o içine bakarak öneririz.

Aksi PDO de içine bakmak ve nesnelere sorgu sonuçları bağlayıcı. Eğer bu şekilde çalışmaya şey elde etmek mümkün olabilir.

Eğer DB Kullanıcıları almak için sorumluluğu olmalıdır hangi sınıf demek?

Kullanıcı sınıfı yanlış görünüyor, neden bir Ödevler kullanıcı tüm (veya bazı) kullanıcıların elde etmek sorguları hakkında "bilmek" olurdu.

Bir UserHome veya UserKeeper sınıf olabilir. ve orada kullanıcı sonuç kümeleri döndüren yöntemleri var.

Bir veritabanından kullanıcıları alma tipik bir SQL soru veritabanı soru ve bir cepten bir soru değil. Ne demek istediğini alamadım sürece?

Bir yük koyarak () veya 100 ayrı veritabanı roundtrips / seçtiği 100 kullanıcıları almak istemiyorum çünkü anlamda bir çok yapmaz kullanıcı sınıfında () yöntemini olsun, çünkü bu durumda nesne modelleri biraz yapay. Bu "sızdıran soyutlamalar" bir örnek. Uygulama önemlidir.

Yani, bir sorgu çalıştırmak için bir fonksiyon yazmak satır bir demet dönmek ve kullanıcı nesneleri bunları açmak için ihtiyacımız olacak.

Ya da bir kriter veya kayıtları bir dizi ileterek kayıtların bir dizi (CodeIgniter veya Kohana kullanılan örneğin) bir ActiveRecord gibi soyutlama kullanın.

Kullanıcıların bir MySQL veritabanında saklanır varsayarsak, ben Kullanıcıları aşağıdaki statik yöntem oluşturmak olacaktır. Eh, muhtemelen yerine Doktrini gibi bir ORM, kullanmak, ama ...

static function queryAll() {
  $query = "SELECT id,name,dob,address FROM user";

  if ($result = $mysqli->query($query)) {
     $all = array();
     while ($obj = $result->fetch_object()) {
       $all[$obj->id] = $obj;
     }
     $result->close();
     return $all;
  }

  return array();

}

View Veritabanı etkileşim benim açımdan ayrı olmalı ve Zend Framework olarak modelini koymak ve modeli sınıf nesnesi yapmak ve tüm işlevini getirme aramalısınız kontrolör ile kontrol.

Bu doğru bir yaklaşım olur.

Ben ... bir dizi veya bir bağlantılı liste veya herhangi bir tür olabilir liste falan adlandırılmış özniteliği / alan, 1 kullanıcı eklemek istiyorum) (Ekle gibi yöntemler olurdu ... Hangi örneğin adında bir sınıf USERLIST yaratacak listeleri. Ve sonra), Edit (), vb (Kaldır

public class User
{
    public $name;
}

public class UserList
{
    public $list;

    public UserList()
    {
        $this->list = array();
    }

    public function Add($user)
    {

    }
}

Daha deneyimleri olan birinin bu konuda yorum olsaydı çok güzel olurdu böylece ama sonra tekrar ... Ben, hem de OOP yeniyim.