Sorunları PDO ile bir nesnenin yeni bir örneğini almak

0 Cevap php

Ben bir web sitesine bir boşluk bölümü ekliyorum ve ben PDO ile sinir bozucu bir küçük sorun halinde çalıştırıyorum. Ben tek bir öğe hakkında bilgi tutmak için bir ClearanceItem sınıf oluşturduk. Öğenin tüm özellikleri korunur ve ben onlar için erişimcilerini ve mutators oluşturduk. Ben iki nedenle sınıf bu şekilde oluşturduk:

  1. Onlar ayarlanmış gibi özelliklerini kontrol edebilirsiniz. Veritabanı istemci korur Excel dosyalarından bir programa nüfuslu bu benim için önemli. Ben excel dosyalarındaki bilgileri doğrulamanın mutators kullanarak belirli aralıklar dahilinde.
  2. Site İngilizce hem de Fransızca olarak erişimcileri doğru görünümü için dile bağlı olarak (örneğin fiyatları gibi) verileri biçimlendirebilir.

Ben her satır için otomatik olarak benim ClearanceItem sınıfının yeni bir örneğini almak bir PDO resultset üzerinde döngü, muktedir istiyorum. Bu kolayca) getirme modunu ayarlarken ya PDOStatement :: fetchObject (kullanılarak yapılır. Ben özellikleri korunduğu gerçeği ile sorunlar olsa da yaşıyorum. Bu PDO bir sınıfın yeni bir örneğini oluşturur zaman özelliklerini ayarlamak için bir şey denir Yansıma Enjeksiyon kullanır gibi görünüyor. Bu korunan özellikler oluşturduğum mutators atlayarak, PDO tarafından doğrudan ayarlanır demektir. Çünkü sayı olmalı (ve mutators tarafından gibi ayarlanır) bu özelliklerinin dizeleri olarak ayarlanır. Hepsinden kötüsü ben mutator sonra diziye ayrı bölme gereken, tek bir dize olarak birden fazla mağaza ve envanter bilgi dönmek için MySQL GROUP_CONCAT kullanıyor olmam. PDO doğrudan bu özelliği ayarlar nedeniyle bir dize olarak biter.

Ben kolayca resultset arkaya dönen bir diziden ClearanceItem yeni bir örneğini oluşturmak için bir fabrika yöntemini alarak bu sorunu aşabiliriz. Bu bile gereksiz ekstra adım gibi görünüyor. Bu özellikleri ayarlamak için mutators kullanarak, bu özellik görünürlük saygı yaparken PDO bir kayıt her satır için bir sınıfın bir örneğini döndürmek mümkün olmadığını biliyor mu?

0 Cevap