Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][PHP->Classes] Problem z przypisywaniem wartości do zmiennych w klasie
Sim00n
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.09.2009

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no bo localhost przypisałeś do zmiennej w obiekcie System a nie DB
Go to the top of the page
+Quote Post
outsider
post
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 36
Dołączył: 8.08.2008

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


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();
Go to the top of the page
+Quote Post
Sim00n
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.09.2009

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


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 ?
Go to the top of the page
+Quote Post
Crozin
post
Post #5





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

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


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
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 Aktualny czas: 19.08.2025 - 18:33