Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dostep do zmiennej
Forum PHP.pl > Forum > PHP > Object-oriented programming
wiiir
Pisze sobie kod i mam cos takiego
  1. class JakasClasa{
  2. var $_zmienna= 15;
  3. var $_obj;
  4. function __construct() {
  5.  
  6. $this->_obj= JakasInnaClasa::getInstance();
  7. }
  8. function uruchom(){
  9. $this->_obj->_start();
  10. }
  11. }
  12. class JakasInnaClasa extends JakasClasa{
  13. //construct itd....
  14. function _start(){
  15. print_r($this->_zmienna);
  16. }
  17. }


mozna jakos uzyskac dostep do zmiennej "_zmienna", chodzi mi o wyswietlenie jej wartosci
masiakla
Ale dziwna mieszanka PHP4 i PHP5 winksmiley.jpg
A co do twojego pytania to użyj słówka parent.

I moja rada zainteresuj się różnicami w oop między PHP4 a PHP5, bo wyszła z tego idealna ochydka na żart i działa na PHP 5 tylko dlatego, że próbuje ono być kompatybilne z 4.

W ogóle próbujesz tu tworzyć singleton, nie dostajesz tam jakiegoś fatala po drodze, bo aż się dziwię, że to przechodzi.
wiiir
nie rozumiem czemu mialo by nie chodzic i nie bardzo wiem o co Ci chodzi tongue.gif hehe.

A co nie mozna tak odwolywac sie do obiektow? Ze najpierw tworze go w konstruktorze a potem w innej funkcji urucham cos z tego obiektu przez zminna w ktorej zostal utworzony?
Co prawda ucze sie opp wiec nie bardzo wiem dlaczego nie tongue.gif

Wracajac do zmiennej, probowalem przez parent tez nie daje rady..
A czy wogole tak mozna?
Bo tak naprawde dostep do zmiennej mam.. tylko nie do wartosci jaka jest clasie rodzica, wiec moze w blad wrowadzilem.. a chodzi mi o ta wartosc smile.gif
masiakla
Bardziej mi chodziło o to, że w jakiś kosmiczny sposób łączysz klasę pochodną z rodzicem, nie widzę w tym celu. Po za tym nie wygląda to na poprawne podejście do sprawy, nie chciało mnie się sprawdzać, ale nie wygląda to pięknie. A na twoje pytanie jak pisałem użyj parent::$_zmienna, zamiast $this->_zmienna.

P.S.
Może napisz odkładnie co chcesz uzyskać, to się podpowie lepsze rozwiązanie i bynajmniej określ się czy ma to być php 4 czy 5., bo słówko var przed właściwościami sugeruje użycie wersji 4, ale dla odmiany w niej zupełnie inaczej definiuje się konstruktor, bo jest like c++ style. Dla odmiany brak widoczności przy metodach również świadczy o tym, że ma to być php 4...
Cytat(PHPManual)
For compatibility with PHP 4, if no visibility declaration is used, then the property or method will be treated as if it was declared as public.


P.P.S.
Możliwe, że twój problem wynika właśnie z tego całego bałaganiarstwa.
yevaud
  1. class JakasClasa{
  2. var $_zmienna= 15;

var jest niepotrzebne, to nie pascal winksmiley.jpg, zamiast var pisz public
generalnie uzywaj operatora widocznosci przy zmiennych tzn. public private albo protected

  1. var $_obj;
  2. function __construct() {
  3.  
  4. $this->_obj= JakasInnaClasa::getInstance();
  5. }

uzywaj operatora widocznosci przy metodach tzn. public private albo protected
odwolujesz sie do statycznej metody "getInstance()", klasa potomna nie ma jej zdefiniowanej, fatal error

  1. function uruchom(){
  2. $this->_obj->_start();
  3. }

to co robisz jest bardzo dziwne, tworzysz obiekt klasy rodzica, w nim tworzysz obiekt klasy potomnej i opakowujesz metode "start" w metode "uruchom", generalnie od dupy strony.
Ewentualnie logiczne jest tu tylko uzycie singletona, bo bez niego wpadlbys w petle rekurencyjna (tzn. tworzenie dowolnego obiektu klasy potomnej lub rodzica, uruchamialoby konstruktor rodzica ktory tworzyl by nastepny obiekt, co uruchamialoby kontruktor ktory tworzylby nastepny obiekt...), ale ciezko mi wymyslec powod stosowania takiej konstrukcji takze z singletonem..

  1. class JakasInnaClasa extends JakasClasa{
  2. function _start(){
  3. print_r($this->_zmienna);
  4. }
  5. }

nie wiem dlaczego wszedzie wciskasz znak _, jesli tak oznaczasz pola/metody private to uzywaj do tego private
poza tym dlaczego mialoby to nie dzialac ? powinno dzialac calkiem ok

  1. $a = new JakasClasa();
  2. $a->uruchom();

da nam 15

  1. $a = new JakasInnaClasa();
  2. $a->_start();

tez da nam 15

  1. $a = new JakasInnaClasa();
  2. $a->uruchom();

i nawet to tez da nam 15


podsumowujac, to co tutaj wkleiles nie zadziala, rzuci Fatal Errorem. Gdybys zrobil z klasy potomnej singletona - do czego prawdopodobnie zmierzasz - to generalnie powinno zadzialac jesli dosc zmyslnie napiszesz konstruktor klasy potomnej. Pomijajac wspomniany Fatal, blad jest w miejscu ktorego tutaj nie wkleiles, widocznie masz nas za jasnowidzow
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.