Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Dostęp do prywatnych pól z innej klasy.
klinski
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.03.2007

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


Witam,

Chciałbym się dowiedzieć czy jest możliwe w php coś takiego. Mam dwie klasy.

  1. <?php
  2. class pierwsza{
  3.  
  4.    private $p_1;
  5.        private $p_2;
  6.  
  7. }
  8.    
  9. class druga {
  10.  
  11.        private $pierwsza;
  12.    
  13.        $this -> pierwsza = new pierwsza;
  14.    //mozliwosc zapisu pol prywatny klasy "pierwsza"
  15.    
  16. }
  17. ?>


W klasie pierwsza mam pola prywatne. Czy jest możliwe aby z klasy drugiej i tylko z tej klasy była możliwość zapisu pól prywatnych klasy pierwsza?
Dziedziczenie raczej nie może być bo te klasy nie maja takiej relacji ze sobą.

Ten post edytował klinski 16.09.2008, 08:07:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat
Lecz choćby przyszło tysiąc atletów
I każdy zjadłby tysiąc kotletów,
I każdy nie wiem jak się natężał,
To nie udźwigną - taki to ciężar!

Innymi słowy - nie da się.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(klinski @ 16.09.2008, 09:05:55 ) *
Dziedziczenie raczej nie może być bo te klasy nie maja takiej relacji ze sobą.
A co by to dało? Przeciesz mówisz o polach prywatnych.
Jedyne co możesz zrobić to obejcie za pomoca metody magicznej _set(), ale to ... głupota. Po to robi się pola prywatne żeby były prywatne.
Go to the top of the page
+Quote Post
klinski
post
Post #4





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.03.2007

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


No tak z dziedziczeniem dałem ciała. Wiem, że po są prywatne aby nikt z zewnątrz nie mógł się do nich dostać, ale myślałem że może jest jakiś mechanizm w php, który określa ze inna klasa może modyfikować pola prywatne. No cóż trudno, nie ma to nie ma. Dzięki za odpowiedź.
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://www.php.net/manual/pl/language.oop5.visibility.php
Poczytaj o "protected"


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





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Nie protected!

Przeciez masz metody! Uzyj ich jako metody dostepowe do tych zmiennych prywatnych.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Dokładnie tak jak pisze ~dr_bonzo. Napisz sobie własne tzw. settery i gettery, przykładowo:
  1. <?php
  2. class Demo {
  3.    private $version;
  4.    
  5.    public function getVersion() {
  6.        return $this->version;
  7.    }
  8.    
  9.    public function setVersion($v) {
  10.        $this->version = $v;
  11.    }
  12. }
  13. ?>

Aczkolwiek to nie rozwiązuje Twojego problemu z pierwszego postu. Możesz przekazywać źródło wywołania metody i na tej podstawie (zwykły warunek) określić czy dany obiekt (z którego nadeszło żądanie) ma prawo do wykonania danej operacji.
  1. <?php
  2. public function setVersion($v, $source) {
  3.        // jesli zadanie pochodzi z poprawnego zrodla...
  4.        if ($source instanceof Source_Allowed) {
  5.            $this->version = $v;
  6.        }
  7.        // ...a jesli nie
  8.        else {
  9.            // rzuc wyjatek lub nic nie rob
  10.        }
  11.    }
  12. ?>


Ten post edytował phpion 16.09.2008, 10:00:54
Go to the top of the page
+Quote Post
LBO
post
Post #8





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


@phpion, ja bym nie uzależniał tej klasy od źródła z którego przychodzi, tylko od Tego co składuje:
  1. <?php
  2. class Demo {
  3.  priotected $version;
  4.  
  5.  public function getVersion() {
  6.       return $this->version;
  7.   }
  8.  
  9.   public function setVersion(Version $v) { // na poziomie języka ustalasz co dokładnie ma byc w zmiennej.
  10.       $this->version = $v;
  11.   }
  12. }
  13. ?>
Go to the top of the page
+Quote Post
klinski
post
Post #9





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.03.2007

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


  1. <?php
  2. public function setVersion(Version $v)
  3. ?>


Nie wiem czy dobrze rozumiem Version $v jest obiektem klasy Version?
I nie wiem czy to rozwiąże mój problem z pierwszego postu.
Go to the top of the page
+Quote Post
LBO
post
Post #10





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Przepraszam, nie doczytałem - cały dzień tak dzisiaj mam :/ Nie, nie rozwiąże to Twojego problemu.

Mógłbyś napisać Twój konkretny przypadek użycia? Bo może dałoby się to w inny sposób rozwiązać.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
Czy jest możliwe aby z klasy drugiej i tylko z tej klasy była możliwość zapisu pól prywatnych klasy pierwsza?


W PHP nie ma "friend" czy jak to bylo z C++.

W Javie masz okreslnik zasiegu "package" (tzn piszesz definicje bez niego) przez co wszystkie klasy z danego pakiegu (namespace) maja dostep do tych zmiennych.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
klinski
post
Post #12





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.03.2007

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


Nie mam konkretnego przypadku, tak tylko zastanawiałem się czy jest taka możliwość w php. Dzięki wszystkim.
Go to the top of the page
+Quote Post
Morkai
post
Post #13





Grupa: Zarejestrowani
Postów: 24
Pomógł: 3
Dołączył: 25.08.2005

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


Jest, ale w PHP5.3:
http://wortal.php.pl/wortal/artykuly/php/p..._w_php6_czesc_1
szukaj: ReflectionProperty::setAccessible
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 - 11:44