Przypisanie klasy do zmiennej

0

Mam szybkie pytanko - jak do zmiennej w PHP przypisać referencję do klasy (nie do obiektu, tylko do całej klasy), by móc potem odwoływać się do zmiennej i korzystać ze statycznych pól i metod tej klasy?

0

Takie coś można spokojnie robić w Pythonie:

class A:
	pole = "git"
	
print A.pole

B = A

print B.pole

W PHP może być trudniej... zobacz http://stackoverflow.com/questions/534159/instantiate-a-class-from-a-variable-in-php

Ale ogólnie raczej bym unikał takiego kombinowania. Lepiej przeprojektuj swoje rozwiązanie by działało zgodnie ze sztuką ;)

0

Chodzi o to, że mam pętlę, która dodaje zapytania na danej klasie. Chciałem mieć coś takiego


$query = MojaKlasa; // jak tutaj przypisać klasę bez tworzenia obiektu?
foreach($table as $item) {
    $query->join($item); 
} 


Da się takie coś uzyskać?

0

Skąd w pętli będziesz wiedział o jaką klasę chodzi? Mówię o tym "MojaKlasa" - bo jeśli w jakiejś tablicy masz stringi "MojaKlasa","NaszaKlasa","EkstraKlasa" - to będziesz mógł tworzyć obiekty w taki sposób

 new $string();

Ew. możesz zainteresować się mechanizmami refleksji (tak się mówi po polsku?? :) ) http://php.net/manual/en/book.reflection.php

0

Wiecie co? Nie ma to jak konkretny kod i konkretne działanie. Zobaczcie poniżej: (używam Laravela)

Mam takie zapytanie

 
return CatalogProducts::join(...)->join(...)->join(...)->join(...);

Do funkcji join będę przekazywał parametr z array'a, więc z góry nie wiem ile tych joinów użyć. Stąd też wykombinowałem taką funkcję


    public function joinSubtables(array $table_names)
    {
        $query = null;
        foreach ($table_names as $key => $name) {
            if ($key == 0) {
                $query = CatalogProducts::join($name);
            } else {
                $query->join($name);
            }
        }
        return $query;
    }
 

Ta pętla wygląda brzydko, bo przy pierwszym wykonaniu muszę przypisać wynik do zmiennej $query, a w kolejnych wywołaniach dopiero robić na niej zapytania. Ewentualnie mogłem zrobić przypisanie przed pętlą, a samą pętlę mógłbym wykonywać od drugiego elementu tablicy. Ale nie w tym rzecz.
Myślałem, że gdyby na samym początku do zmiennej $query jakoś przypisać referencję do klasy CatalogProducts, to może dało by się zrobić to w jednej pętli, np:


        $query = CatalogProducts; // jakieś dziwne przypisanie
        foreach ($table_names as $name) {
                $query->join($name);
        }
        return $query;
    }
 

Wówczas kod wyglądałby lepiej.

Stąd też moje pytanie o możliwość takiego przypisania do zmiennej $query

1 użytkowników online, w tym zalogowanych: 0, gości: 1