PHP: Önceden adını bilmeden bir nesne özelliğini koruyun

0 Cevap php

Tamam, bu imkansız olabilir, ama ben her şeyi yeniden işleme önce sorayım dedim ... Ben böyle bir durum var:

Ben de nesneler "parçalarını" alabilir bir nesne sınıfı var. Bu temelde böyle çalışır:

class myObject {
    //Receives an associative array of "Piece" objects
    function __construct($objects) {
        foreach( $objects as $k=>$v ) {
            $this->{$k} = $v;
        }

Açıkçası bir sürü kod unutuyorum, ama bu size bir fikir verir umarım. Temelde farklı şeyler yapmak farklı "parça" nesneleri bir ton var, ve ben "myObject" içine bunlardan bir dizi başarılı olursa o zaman "myObject" farklı şeyler her türlü yapmak için çok esnek ve kullanışlı sınıf olur.

Yani, Ben ile "$ kitap" olabilecek bir "Kitap" nesne oluşturmak için kullanabilir ve bir "Yazar Piece" ve "ISBN Piece", ve bu parçaları vb verileri doğrulamak için nasıl bilemez dahil parçalar olabilir nesneler üye değişkenler "yazar" olarak ayarlandığında ve "ISBN".

Gibi şeyler yapabilirim çünkü bu harika:

echo $book->author; //all Pieces have a __toString() method.
echo $book->author->firstName;
$book->author->showBio();
$book->author->contactForm();

... Vb.

Şimdi noktasına. Bu sistem harika çalışıyor ve büyük kılan şeylerden biri ben almak ve ben gibi ve bunları birbirine bağlamak için bir nesnenin içine sopa bu parçalardan herhangi birini seçebilirsiniz olmasıdır.

Ama sorun daha sonra kodunu kullanabilirsiniz başkası denemek istemiyorum gibidir:

$book->author = "John Doe";

... O zaman sadece bir değer yerine yazarı nesne olurdu çünkü. Ben onlara bir hata vermek yerine bunu onlara talimat isterim:

$book->author->setName("John Doe");

Ben önceden bilmiyorum çünkü Peki parçalar herhangi bir birey nesne olabilir (ve tüm nokta anında herhangi bir nesne araya özgürlüğü var edebilmek için), ben sadece "özel $ yazar" ayarlanamaz sınıf bildiriminde.

Ben __ get () ve __ seti () biraz oyalanmayı denedim, ama onlar şimdi olduğu gibi nesnelerin işlevselliğini ödün vermeden çalışmak için alamadım.

Yani, dediğim gibi, ben bu imkansız olabilir biliyorum, ama ben pes önce, ben sorayım dedim. Bu sınıf tanımında bildirerek olmadan oluşturulduktan sonra bir nesnenin bir özelliğini korumak için bir yolu var mı?

0 Cevap