Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dynamiczne tworzenie pól w klasie
rudolf35
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 17.10.2007

Ostrzeżenie: (0%)
-----


Chciałbym, żeby w klasie tworzone były dynamiczne zmienne w przypadku gdy inna klasa odwołuje się do nieistniejącego pola. Np
  1. class A
  2. {
  3. }
  4. class B
  5. {
  6. public $object;
  7. public function __construct()
  8. {
  9. $this->object = new A();
  10. $this->object->title='Strona główna';
  11. }
  12. }

W powyższym przypadku chciałbym żeby zostało utworzone automatycznie pole "title".
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jaslanin
post
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

Ostrzeżenie: (0%)
-----


Cytat
Chciałbym, żeby w klasie tworzone były dynamiczne zmienne w przypadku gdy inna klasa odwołuje się do nieistniejącego pola. Np


I.

Język PHP jest językiem interpretowanym, nie musisz definiować/deklarować zmiennych przed ich użyciem. Chodzi o to że np. nie musisz deklarować chęci utworzenia zmiennej np.

$zminna = 'cos'; // nic nie deklarujesz że chcesz taką zmienną, od razu piszesz jaką ma mieć wartość

natomiast w przypadku struktur które mają wiele poziomów nie musisz deklarować ostatniej zmiennej.

np. w przypadku

$obiekt1-> obiekt2->nowa_zmienna


obiekt 1 i obiekt2 muszą istnieć, ale nowa_zmienna "istnieć" już nie musi



II.

Lepszym rozwiązaniem wydaje mi się stworzenie w klasie A, właściwości klasy (ty nazywasz to chyba "polem") typu tablicowego która przechowywała by wszystkie "dynamicznie" utworzone zmienne


Tutaj zrobiłem taki przykład według mnie spełniający twoje wymagania:

Kod
class A
{

    public function __get ($var)
    {

        if (isset($this->$var))
        {
            return $this->$var;
        }
        else
        {
            echo "Zmienna '$var' nie istnieje";
        }
    }

    public function doSomething ()
    {

        echo $this->title;
    }

    public function doSomething2 ()
    {

        echo $this->title . ' v 2.0';
    }

}

class B
{

    public $object;

    public function __construct ()
    {

        $this->object = new A();
        $this->object->title = 'Strona glowna';
        $this->object->doSomething();
    }
}

$objB = new B();

echo "<br>";

$objB->object->doSomething2();

echo "<br>";

echo $objB->object->zmienna_ktora_nie_istnieje;



PS. być może czegoś nie zrozumiałem, jeżeli tak, proszę o oświecenie mnie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 06:17