Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne klasy OOP
Forum PHP.pl > Forum > PHP
webJ@cob
Witam,

Mam deklarację:
$aktualnosci = new Aktualnosci . $sesja_lang->lang();

Która wywala mi błąd. Gdy napiszę:

$akt='Aktualnosci'.$sesja_lang->lang;
$aktualnosci = new $akt();

to jest ok.

ja zmodyfikować pierwszy przypadek to jednej linijki kodu?
matixrr
Może:
  1. <?php
  2. $aktualnosci = 'new Aktualnosci . $sesja_lang->lang()';
  3. ?>

?
mike
  1. <?php
  2.  
  3. $aktualnosci = new Aktualnosci{$sesja_lang->lang}();
  4.  
  5. ?>
Pominę to że pomysł takich klas jest po prosty głupi. Potwornie głupi.
phpion
Cytat(webJ@cob @ 19.02.2009, 18:20:29 ) *
ja zmodyfikować pierwszy przypadek to jednej linijki kodu?


  1. <?php
  2. $akt='Aktualnosci'.$sesja_lang->lang; $aktualnosci = new $akt();
  3. ?>

thumbsupsmileyanim.gif

A na poważnie: wydaje mi się, że nie da się tego osiągnąć krótszym zapisem.

mike:
Twój kod wywala:
Cytat
Parse error: syntax error, unexpected '{'
mike
Cytat(phpion @ 19.02.2009, 16:26:36 ) *
mike:
Twój kod wywala:
Hmm, a myslałem, że tak zadziała. No nic. I tak pomysł jest bzdurny :-)
phpion
Cytat(mike @ 19.02.2009, 18:31:30 ) *
I tak pomysł jest bzdurny :-)

Zgadzam się smile.gif hehe.

Swoją drogą: w ten sposób działa:
  1. <?php
  2. class Aktualnosci_Pl {
  3. }
  4.  
  5. $lang = 'Pl';
  6.  
  7. eval('$aktualnosci = new Aktualnosci_'.$lang.';');
  8.  
  9. print_r($aktualnosci);
  10. ?>

Co nie zmienia faktu, że jest to głupie smile.gif
webJ@cob
Moim zdaniem nie jest to w aż tak głupi pomysł z racji stosowania FrameWorka i konieczności stosowania dynamicznych nazw klas, obiektów, kontrolerów i widoków.
Niemniej jednak dziękuję za pomoc i po części przyznaję rację.

Jak sie pracuje po 17h dziennie i do tego zestaw kilkanastu kaw to czasami rodzą się dziwne pomysły, mutanty.

Pozdrawiam.
dr_bonzo
Zawsze mozesz cos takiego machnac
  1. <?php
  2. $lang = $session->lang();
  3. $objectFactoryWhatever = new ObjectFactory($lang);
  4. $article = $objectFactoryWhatever->new( 'Article' );
  5. ?>


ladniej wyglada, i nie musisz 1000ce razy przekazywac $lang'a.
Crozin
@webJ@cob: głupie nie jest to, że tworzysz dynamicznie nazwę klasy, której obiekt chcesz utworzyć, tylko to jakie Ty klasy masz.
AktualnosciPl, AktualnosciEn, AktualnosciDe
Co to ma być? Tworzysz jedną, która ma metodę, w której podaje się język, albo nawet sama sobie odczytuje go w swoim wnętrzu
  1. <?php
  2. class Actualnosci{
  3.  public function ustawJezyk($jezyk){
  4.    $this->jezyk = $jezyk;
  5.  }
  6. }
  7.  
  8. //albo
  9.  
  10. class Actualnosci{
  11.  public function __construct(){
  12.    $this->jezyk = Registry::get('session')->lang(); //czy w jakis inny sposob pobierasz sobie jezyk
  13.  }
  14. }
  15. ?>
PS. Nazwy (zmienny, klas, funkcji) powinieneś mieć w języku ang.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.