Nesneler içine veritabanı değerlerini alma

4 Cevap php

Şey sınıfları var ve daha sonra veritabanı veri olması. Eğer nasıl veritabanındaki verileri içeren nesnelerin özelliklerini kurarım bir nesne oluşturduğunuzda?

Ben böyle bir şey gördüm ve bu gerçekten bunu yapmak için en iyi yol olup olmadığını merak ediyorum. Bu oldukça yaygın bir sorundur eminim, ama ben bunu işlemek için nasıl en kabul edilen çözümlerin ne olduğunu bilmiyorum.

Nesnesi oluşturulduğunda, bu örnekte, bir parametre olarak bir id geçmek ve daha sonra kimliği ile veritabanına bir sorgu çalıştırmak ve nesne özellikleri için döndürülen değerleri assing. Ben çok PHP deneyimi yok ve bu çok kullanılan görmedim.

Bu amaca ulaşmak için kabul edilebilir bir yolu var mı? Daha iyi ya da daha fazla kabul gören bir yöntem var mı?

public function __construct($id = null){
    if($id != null){
        $sql = "SELECT *
        FROM users
        WHERE user_id = $id";

        $res = Db::returnRow($sql);

        // $res contains an associative array with database columns and values

        if($res){
            $this->user_id = $res['user_id'];
            $this->user_name = $res['user_name'];
            //and so on...
        }
    }
}

Biri bunu yapmak için doğru yolu nedir göstermek için bazı örnek kod veya pseudocode verebilir misiniz?

4 Cevap

Bu belki bir ev ödevi için kabul edilebilir bir yol olabilir. Ama architecturaly değil.

(Sizin örnekte bir kullanıcı) iş verilerinizi temsil eden sınıf gevşek veritabanı erişim mantığı ile birleştirilmesi gerekmektedir. Sonunda bir kullanıcı olarak PHP sınıf oyunculuk veriler bir veritabanında, bir dosya ya da başka herhangi bir kaynaktan gelen farkında olmamalıdır. Eğer ona bir şey değiştirmek zorunda kalmadan diğer projelerde kullanıcı php sınıfını yeniden mümkün olacak takiben! Eğer içine veri erişim mantığı varsa sıkışmış.

Sonuç: Head First serisi biri son derece erişilebilir ve keyifli: (sizin durumunuzda DAO desen bir göz atın ;)) Ipucu Ben Tasarım Deseni bazı kaynaklar okumak öneririz.

Sen birleşmeli dizinin anahtar / değer çiftleri üzerinde döngü ile, otomatik olarak sizin için bunu yapmak için bir işlev oluşturabilirsiniz. Ya da bir ORM library kullanarak içine bakmak olabilir.

Evet, bütün nesneler devralan bir üst sınıf olan bu yarı-otomatik hale getirebilirsiniz. Yük üzerinde, "[Benim tabloismi] DAN ezsiniz", sorgular ve isimleri ile ilişkilendirilebilir bir dizi doldurur. Bir id geçti olmuşsa, o id ile bu tablodaki geçerli bir nesne arar ve diziye değerleri atar.

Yan Not: doğrudan bu gibi sorgu içine id geçemiyor. Sql Parametize ve sterilize herhangi bir kullanıcı girişi etrafında bir işlevi sarın.

Bu mysql ise, sadece yapabilirsiniz:

$obj = mysql_fetch_object($query);

PDO almak için hedef olarak keyfi sınıfları kullanabilir, ancak değişken veri before kurucu çalışan atamak sakının yeteneği:

$pdo->query($stmt, PDO::FETCH_CLASS, "MyClass", array('foo'=>'bar'));

... Son parametre sınıf kurucusunu için bağımsız değişkenleri içeriyor nerede.