Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasy php 4 dziedziczenie?, cos tu nie chodzi
pirat
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.05.2003
Skąd: Katowice

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


dobra napisalem sobie pliczek klasa.class.php
  1. <?php
  2.  
  3. class db {
  4.  
  5. var $db;
  6.  
  7.  
  8.  
  9. function db() {
  10.  
  11. $db[user] = &#092;"tws\";
  12. $db[haslo] = &#092;"haslo\";
  13. $db[host] = &#092;"localhost\";
  14. $db[dbname] = &#092;"tws\";
  15.  
  16. $this->db = mysql_pconnect ($db[host], $db[user], $db[haslo]);
  17.  
  18.  mysql_select_db ($db[dbname], $this->db);
  19.  
  20.  
  21.  
  22. }
  23. }
  24.  
  25. ?>

Teraz napisalem druga klase i chcialbym z niej dostac sie do $this->db z pierwszej
  1. <?php
  2.  
  3. class html extends db {
  4.  
  5.  
  6. var $html;
  7.  
  8.  
  9.  
  10. function html() { //konstruktor clasy
  11.  
  12. $query_content = &#092;"SELECT * FROM strony\"; //jakies zapytanko
  13. $this->szablon = mysql_query($query_content, $this->db); // TU CHCE SIE DOSTAC DO MOJEGO THISA Z POPRZEDNIEJ KLASY i cos mi nie wychodzi
  14.  
  15. $linia = mysql_fetch_array($this->szablon); //never mind
  16. $this->szablon = $linia; //never mind
  17.  
  18. }
  19.  
  20.  
  21. ?>

co wy na to snitch.gif


--------------------
Zdrowy rozsądek to rzecz, której każdy potrzebuje, mało, kto posiada, a nikt nie wie, że mu brakuje.

Czasami myślę, iż Bóg tworząc człowieka przecenił nieco swoje zdolności.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Yy, nie wiem czy to pomoże bo obiektówki zacząłem się uczyć dopiero od PHP5: w konstruktorze klasy html:
  1. <?php
  2. parent::db();
  3. ?>


Ten post edytował crashu 15.01.2005, 21:36:49


--------------------
Go to the top of the page
+Quote Post
NuLL
post
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


W czwórce to nie przejdzie :/

Pehap nie skstruuje obietktu kiedy ty go potrzebujesz. Klasa ktora dziedzicyz posaida tylko własności i metody tej od której dziedziczy - nic więcej.

Ten post edytował null 16.01.2005, 00:11:35


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
DeyV
post
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




chyba w żadnym języku coś takiego by nie przeszło. A jednak nie stanowi to żadnego problemu.
Dlaczego?
Ponieważ zarówno w php4 jak i php5 należy wymuszać wywołanie konstruktora z klasy po której się dziedziczy, jeżeli pojawi się taka potrzeba.

A więc w takim przypadku należałoby zrobić tak:
  1. <?php
  2. class html extends db {
  3. function html() { //konstruktor clasy
  4. { 
  5. parent::db();
  6. }
  7. }
  8. ?>


w php5 jest o tyle łatwiej, że nie musisz pamietać nazwy kostruktora, można bowiem wykorzystać stałą nazwę konstruktora __construct()

Wtedy taki zapis wyglądałby tak.
  1. <?php
  2.  
  3. class Db {
  4.  function __construct() {
  5. // cos tam
  6.  }
  7. }
  8. class Html extends Db {
  9.  function __construct() {
  10.  parent::__construct();
  11.  }
  12. }
  13. ?>


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
bela
post
Post #5


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Cytat(DeyV @ 2005-01-16 13:25:25)
w php5 jest o tyle łatwiej, że nie musisz pamietać nazwy kostruktora, można bowiem wykorzystać stałą nazwę konstruktora __construct()

ale przeciez piszesz extends klasa więc widzisz jak się nazywa konstruktor winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
pirat
post
Post #6





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.05.2003
Skąd: Katowice

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


ooo o to chodziło dzięki
Kod
DeyV


Tego mi brakowało :] i tak przy okazji mam pytanie czy wg. was wielkim grzechem jest używanie zmiennych globalnych, bo zawsze staram sie ten problem omijac ale chyba doszedlem do takiej zlozonosci ze nie bede mogl ich uniknac, ale to cos na osobny post, jeszcze sie zastanowie i napisze ;]

dziex


--------------------
Zdrowy rozsądek to rzecz, której każdy potrzebuje, mało, kto posiada, a nikt nie wie, że mu brakuje.

Czasami myślę, iż Bóg tworząc człowieka przecenił nieco swoje zdolności.
Go to the top of the page
+Quote Post
bela
post
Post #7


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


zmienne globalne są nieobiektowe smile.gif dzieki nim masz dostep wszedzie, a oop zaklada ekapsulacje, zawsze da się ominąć globale, np przez singleton czy stałe


--------------------
Go to the top of the page
+Quote Post
DeyV
post
Post #8





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Cytat
ale przeciez piszesz extends klasa więc widzisz jak się nazywa konstruktor


A wyobraź sobie taką sytuację. (w php4)
  1. <?php
  2.  
  3. class Db {
  4. function Db() {
  5. // construkctor
  6. }
  7. }
  8.  
  9. class Article extends Db {
  10.  // brak własnego konstruktora
  11. }
  12.  
  13. class News extends Article {
  14. function News(){
  15.  parent:: questionmark.gifquestionmark.gif () // jaki konstruktor parenta wywołać? 
  16.  // a jeśli ktoś kiedyś dopisze konstruktor dla Artile, który w rzeczywistości będz
  17. e lepsiejszy;) niż ten z Db ? 
  18.  
  19. }
  20. }
  21.  
  22. ?>


To jest bardzo prosty przykład, ale wydaje mi się, że dosyć dobrze pokazuje zaletę korzystania z __construct() w php5.
A nawet w php4 można to zasymulować, dzięki zapisowi
  1. <?php
  2.  
  3. class test {
  4. function test() { //construktor
  5. }
  6. function __construct{
  7. selt::test();
  8. // albo 
  9. $this->test();  // nie pamietam, jak powino być
  10. // w każdym razie możliwość wywołania konstruktora przez __construct()
  11. }
  12. }
  13. ?>


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
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: 20.08.2025 - 15:45