Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PHP->Classes] Problem z przypisywaniem wartości do zmiennych w klasie
Forum PHP.pl > Forum > Przedszkole
Sim00n
Kod
<?php

class System {

    public $DBhost = 'test';
    public $DBuser;
    public $DBpass;
    public $DBdatabase;
}

class DB extends System {
    public function connect(){
        echo $this->DBhost;
    }
}


$System = new System();
$System->DB = new DB();

$System->DBhost = 'localhost';

echo $System->DB->connect(); // TUTAJ

?>


Witam, czy któryś z Panów mógłby mi wytłumaczyć dlaczego oznaczona linijka (//TUTAJ) wyrzuca na ekran "test" a nie "localhost" i jak sprawić żeby wartość localhost dobrze się przypisywała.
Pozdrawiam, Sim00n.
tehaha
no bo localhost przypisałeś do zmiennej w obiekcie System a nie DB
outsider
Ponieważ wartość przypisujesz tylko do zmiennej $System->DBHost, daj print tej zmiennej to będzie poprawnie. A z funkcja ->connect(); nie działa ponieważ zmienna ($System->DB) ma swoje zmienne odziedziczone po klasie System, w końcu z niej dziedziczy, a funkcja connect właśnie z tych zmiennych korzysta smile.gif

Poprawna wersja:
Kod
$db = new DB;

$db>DBhost = 'localhost';

echo $db->connect();
Sim00n
No tylko problem w tym, że ja chciałbym zachować zapis
$System->DB->connect
ponieważ to ładniej wygląda i moim zdaniem jest czytelniej pogrupowane. Jakieś pomysły jak to zrobić smile.gif ?
Crozin
Cytat
Witam, czy któryś z Panów
Może i nie jest to liczba grupa, ale panie też zajmują się programowaniem.

Kilka błędów:
  1. Po co Ci dane takie jak użytkownik, host czy hasło w właściwościach obiektu, skoro używane są jedynie przez konstrukcje typu connect? Przekaż to jako argumenty dla tej metody.
  2. Dlaczego nie wykorzystasz PDO
  3. W jaki sposób połączenie z bazą danych jest rozwinięciem systemu? I co do licha parametry do połączenia z bazą danych mają wspólnego z systemem? Tego dziedziczenia nie powinno tutaj być.
  4. Nie rozumiesz idei obiektowości. Tworząc nowe obiekty nie mają one nic wspólnego z już istniejącymi. Instancje są niezależne. Tak więc obiekt $system to nie to samo co rodzic obiektu $system->db:
    1. class Super {
    2. public $prop = 'default';
    3. }
    4.  
    5. class Delivered extends Super {
    6. public $prop2 = 'default2';
    7. }
    8.  
    9. $super = new Super();
    10. $suer->prop = 'abc prop';
    11.  
    12. $delivered = new Delivered();
    13. echo $delivered->prop; // default
    14. $delivered->prop = 'def';
    15. echo $delivered->prop; // def
    16. echo $super->prop; // abc prop
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.