Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Uniwersalne tworzenie obiektów klas o nazwach ze string'a
eerie
post
Post #1





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 3.08.2017

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


Sorry, jeśli odpowiedź na moje pytanie jest banalna. Jednak szukam w Google i nie mogę nic znaleźć.

Chcę przekazywać parametrem metody stringi (np. 'NewClass'), na podstawie których będę tworzyć obiekty (np. $object = new NewClassModel()). Potem chcę te obiekty zwracać (return $object). Chodzi o to, aby to było uniwersalne. Jak to prosto zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
eerie
post
Post #2





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 3.08.2017

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


Chciałem zrobić odwołania do modelu podobnie, jak jest w Symfony. Np. coś w tym stylu:

Kod
$sr = $model->getRepository('Site');
$sr->setMethod($id, $varible);


Ale właśnie zauważyłem, że to nie jest najlepsze rozwiązanie. W Symfony jest używany menadżer:

Kod
$em = $this->getDoctrine()->getManager();
$em->getRepository('App:Site')->setMethod($id, $varible);


Chodzi mi o to, aby nie wstrzykiwać do kontrolera kilku obiektów z repozytoriami (np. dla UserRepository, SiteRepository oddzielnie), ale aby to zrobić uniwersalnie. Tworzyć jeden obiekt (np. w index.php). Połączyć się z bazą. Wstrzyknąć go do kontrolera i potem używać tego repozytorium, które jest mi akurat potrzebne. Jednak widzę, że tak tego nie zrobię. Prosiłbym o sugestie, jak to zrobić lepiej. (IMG:style_emoticons/default/wink.gif)

Podobnie planuję postępować z kontrolerami. W index.php, na podstawie parametru z .htaccess, tworzyć uniwersalnie obiekt kontrolera, który jest mi akurat potrzebny. Przekazywać mu metodą obiekt mojego modelu, tablicę wyników z formularza i sesję.

Ok. Wersje robocze klas wyglądają na chwilę obecną tak:

Kod
<?php

declare(strict_types=1);

namespace App\Core;

use App\Core\Model;

class Controller
{
    public function getManager(): object
    {
        $model = new Model();
        $model->dbConnect();

        return $model;
    }
}


Kod
<?php

declare(strict_types=1);

namespace App\Core;

use App\Core\DataBase;

class Model extends DataBase
{
    public function getRepository(string $name): object
    {
        $class = $name . 'Repository';

        return new $class;
    }
}


Kontrolery mają rozszerzać klasę Controller. Przykładowe użycie:

Kod
$mm = $this->getManager();
$mm->getRepository('Site')->setMethod($id, $variable);
$variable = $mm->getRepository('Site')->getMethod($id);


Może tak pozostać? Prosiłbym o ocenę kodu i uwagi. (IMG:style_emoticons/default/smile.gif)

PS Właśnie zauważyłem, że jest jeszcze jedne problem. Da się użyć jakiegoś uniwersalnego "use" dla moich klas z repozytorium? Bo teraz wywali błąd...
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 - 04:08