Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "Inne" dziedziczenie
oprener
post 25.06.2010, 15:12:28
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 28.04.2010

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


Witam. Kodząc sobie "coś" małego mam mały problem. A mianowicie, dajmy na to, że mamy klasę A i jest klasa Class której argumentem jest nazwa pliku innej klasy(nazwa klasy == nazwa pliku). Klasa Class includuje tą klasę. I czy byłoby możliwe, żeby klasa Class przypisała uchwyt do klasy która jest w argumencie do jakiejś zmiennej w klasie A ?


--------------------
"Software is like sex: it's better when it's free." - Linus Torvalds
Chodź czasem warto skorzystać z komercyjnych rozwiązań [ nie chodzi tu o software ]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Quantum
post 25.06.2010, 16:02:25
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


wzorzec registry, singleton, przekazanie instancji klasy A do klasy B jako argument dla konstruktora lub dajesz dziedziczenie klasie B z klasy A i przypisujesz właściwość przez $this

Ten post edytował Quantum 25.06.2010, 16:05:13
Go to the top of the page
+Quote Post
erix
post 25.06.2010, 16:04:18
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




chodzi ci o coś takiego?

  1. class klasa{
  2. function __construct($plik){
  3. require $plik;
  4. $this = new klassss;
  5. }


Chyba że to nie to, ale wytłumacz jak sołtys krowie na miedzy.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
oprener
post 7.07.2010, 12:12:42
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 28.04.2010

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


OK. Już wiem gdzie mogę znaleźć odpowiedź na me pytanie. Dziękuję odpowiedzi.

Nie chciałem robić robić nowego tematu, ponieważ dotyczy to tego samego problemu. Poprzednie rozwiązanie jakiego użyłem wygląda tak :
Kod
<?php
    function __autoload($Class)
    {    
        require_once('Models/' . $Class . '.php');
    }
    class Model
    {    
        function Get($Class)
        {
            return new $Class();
        }
        
    }
?>


a by załadować model muszę napisać coś takiego :
Kod
<?php
    $model = new Model();
    $model = $model->Get('First');
    $model->test();
?>


To co napisał erix już próbowałem. Wynik : Fatal error: Cannot re-assign $this
Czy nie dało by się teraz zrobić tak by nazwę klasy podawałoby się jako argument i już ?


--------------------
"Software is like sex: it's better when it's free." - Linus Torvalds
Chodź czasem warto skorzystać z komercyjnych rozwiązań [ nie chodzi tu o software ]
Go to the top of the page
+Quote Post
Crozin
post 7.07.2010, 13:28:52
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jak rozumiem metoda Test należy do klasy First? Musiałbyś w klasie Model utworzyć metodę robiącą za proxy - mogła by to być nawet metoda magiczna:
  1. class Model {
  2. public function get($class) {
  3. $this->instance = new $class();
  4. }
  5.  
  6. public funtion __call($method, $args) {
  7. $ref = new ReflectionMethod($this->instance, $method);
  8. return $ref->invokeArgs($args);
  9. }
  10. }
Tylko... po co? Dlaczego nie zrobisz po prostu:
  1. $model = new First();
  2. $model->test();
Go to the top of the page
+Quote Post
gcdreak
post 8.07.2010, 21:30:40
Post #6





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Cytat
Czy nie dało by się teraz zrobić tak by nazwę klasy podawałoby się jako argument i już ?


$obj = eval(sprintf('new %s', $className));

Lecz nie jest to eleganckie rozwiązanie. Wzorzecz Factory może coś Ci pomoże.
Go to the top of the page
+Quote Post
Crozin
post 8.07.2010, 22:17:45
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Za tego evala to Ci powinni coś odciąć... tak w ramach pokuty. $obj = new $className(); jak już, albo ReflectionAPI.
Go to the top of the page
+Quote Post
Hoku
post 9.07.2010, 22:34:00
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 2
Dołączył: 6.07.2010

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


http://wortal.php.pl/wortal/artykuly/php/p...orce_projektowe
powinna cię zainteresować cześć o DI kontenerze ogółem kontenery mogą cię zaciekawićwinksmiley.jpg

jeśli wczytywane klasy będą miały wspólny interfejs to łatwo je obsłużyć.
na pewno powinieneś zainteresować się refleksją klas metod itp. dokumentacja raczej uboga winksmiley.jpg
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:13