Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "Inne" dziedziczenie
Forum PHP.pl > Forum > PHP > Object-oriented programming
oprener
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 ?
Quantum
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
erix
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.
oprener
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ż ?
Crozin
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();
gcdreak
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.
Crozin
Za tego evala to Ci powinni coś odciąć... tak w ramach pokuty. $obj = new $className(); jak już, albo ReflectionAPI.
Hoku
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
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.