Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dostęp do klasy
mareczek2
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.04.2007

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


  1. <?php
  2. class klasa {
  3. public function zrobcos() {
  4. //kod
  5. }
  6. }
  7. class klasaPierwsza {
  8. public function wykonaj() {
  9. $tmp = new klasa();
  10. $tmp->zrobcos();
  11. }
  12. }
  13. class klasaDruga {
  14. public function wykonaj() {
  15. $tmp = new klasa();
  16. $tmp->zrobcos();
  17. }
  18. }
  19. ?>

Witam,
potrzebuję zrobić coś takiego, żeby klasaPierwsza miała dostęp do 'klasa', a klasaDruga już nie, czyli potrzebuje czegoś takiego:
  1. <?php
  2. class klasa {
  3. function __construct() {
  4. if(wywolane z != klasaPierwsza) exit;
  5. }
  6. public function zrobcos() {
  7. //kod
  8. }
  9. }
  10. class klasaPierwsza {
  11. public function wykonaj() {
  12. $tmp = new klasa();
  13. $tmp->zrobcos();
  14. }
  15. }
  16. class klasaDruga {
  17. public function wykonaj() {
  18. $tmp = new klasa();
  19. $tmp->zrobcos();
  20. }
  21. }
  22. ?>

macie może jakiś pomysł jak to zrobić?


EDIT (co do wyjaśnienia):
mam kod taki jak ten u góry:
jest sobie klasa o nazwie "klasa" i problem jest w tym, że instancję tej klasy można robić z każdego miejsca, a chciałbym, aby jej instancję można było robić tylko z określonych innych klas.

Ten post edytował mareczek2 30.04.2007, 21:21:51
Go to the top of the page
+Quote Post
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


nie rozumiem co chcesz zrobić smile.gif Popraw treść i postaraj sie lepiej wytłumaczyć przypuszczam że chodzi Ci o dziedziczenie ale to moze tylko mydlą mi sie oczy smile.gif


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





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Jedyne co możesz zrobić to skorzystać z dziedziczenia. Ustawic konstruktor jako protected i wtedy tylko klasa ktora dziedziczy bedzied mogla wywolac ta klase. Innego sposobu nie ma.


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
devnul
post
Post #4





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


da się da - troche pomyślunku winksmiley.jpg
  1. <?php
  2. class klasa {
  3. function __construct(){
  4. try {
  5. throw new Exception("asd",1234);
  6. } catch (Exception $e){
  7. var_dump($e);//tej linijce się przyjzyj o rozszerz
  8. }
  9. }
  10. public function zrobcos() {
  11. //kod
  12. }
  13. }
  14. class klasaPierwsza {
  15. public function wykonaj() {
  16. $tmp = new klasa();
  17. $tmp->zrobcos();
  18. }
  19. }
  20. class klasaDruga {
  21. public function wykonaj() {
  22. $tmp = new klasa();
  23. $tmp->zrobcos();
  24. }
  25. }
  26. $k1=new klasaPierwsza();
  27. $k1->wykonaj();
  28.  
  29. $k2=new klasaDruga();
  30. $k2->wykonaj();
  31. ?>

pewnie da się to zrobić inaczej - ale jakoś tylko to mi w tej chwili do głowy przychodzi. oczywiscie gotowca nie ma ale jest wskazówka winksmiley.jpg

//edit : dla jasności - nie chodzi mi o wykorzystanie wyjątków - tylko mozliwości trasowania która jest zaimplementowana między innymi tam debug_backtrace()

Ten post edytował devnul 30.04.2007, 22:44:30


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
menic
post
Post #5





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


No pomysł ciekawy smile.gif
A inaczej mozesz zrobic dodajac przy wywołaniu $this i za pomocą instanceof sprawdzac czy ta klasa moze tworzyc nowy obiekt. Ale to jest metoda troche bardziej uciążliwa od tej devnull'a.


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
mareczek2
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.04.2007

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


Cytat
A inaczej mozesz zrobic dodajac przy wywołaniu $this i za pomocą instanceof sprawdzac czy ta klasa moze tworzyc nowy obiekt

to nic mi nie da, bo wystarczy, że zamiast $this klasa wrzuci mi instancję jakiejś uprawnionej klasy - tak wiem klasy nie są żywe i same tego nie zrobią, ale poszczególne klasy nie są z "autoryzowanego" źródła

devnul, wielkie dzięki

Ten post edytował mareczek2 30.04.2007, 22:53:07
Go to the top of the page
+Quote Post
devnul
post
Post #7





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


A prosze smile.gif
@menic: czy rozwiązanie o którym mówisz nie wymagałoby dziedziczenia? chyba że coś źle zrozumiałem. Poza tym dziedziczenie nie daje gwarancji na poprawne działanie. Przynajmniej tak mi się zdaje


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
menic
post
Post #8





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


NIe wymagałoby. Poprostu sprawdzasz w konstruktorze czy przekazany obiekt jest typu ktory jest dozwolony. Mozesz to wlasnie osignac za pomocą instanceof smile.gif

Tylko własnie w tym przypadku istnieje mozliwosc "podlozenia" jakiegos bubla.

Ten post edytował menic 1.05.2007, 10:51:12


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
devnul
post
Post #9





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


czyli chcesz jako parametr przekazywac, no to faktycznie troche za duże zaufanie do potencjalnego usera


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
faster
post
Post #10





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 9.09.2002
Skąd: Pszczyna

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


Tylko zastanawiam się co takie zabezpieczenie mogłoby wnieść w logikę aplikacji? I tak w zasadzie nie zabezpieczysz się przez niewłaściwym użyciem danej klasy. Jeżeli trafisz na "specjalistę" to jest w stanie i klasę Drzewo wykorzystać jako List smile.gif. Natomiast wróćmy do Twojego problemu. co powiesz na takie rozwiązanie?

  1. <?php
  2.  
  3. class Klasa
  4. {
  5.  
  6. private function __construct()
  7. {
  8. }
  9.  
  10. public static function DoForKlasaPierwsza(KlasaPierwsza $klasa)
  11. {
  12. $klasa = new Klasa();
  13. $klasa->zrobcos();
  14. }
  15.  
  16. public function zrobcos()
  17. {
  18. //kod
  19. print('do it');
  20. }
  21. };
  22.  
  23. class KlasaPierwsza
  24. {
  25. public function wykonaj()
  26. {
  27. Klasa::DoForKlasaPierwsza($this);
  28. }
  29. };
  30.  
  31. class KlasaDruga
  32. {
  33. public function wykonaj()
  34. {
  35. Klasa::DoForKlasaPierwsza($this);
  36. }
  37. };
  38.  
  39.  
  40. $k1 = new KlasaPierwsza();
  41. $k1->wykonaj();
  42.  
  43. $k2 = new KlasaDruga();
  44. $k2->wykonaj();
  45.  
  46. ?>



Pozdrawiam
Go to the top of the page
+Quote Post
devnul
post
Post #11





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


@faster: Twoje rozwiązanie wymaga przekazania parametru, który może być dowolny (bo równie dobrze zamiast $this możęsz przekazać instancję obiektu który pasuje do wzorca, ew dziedziczyć po klasie pierwszej i nadpisać odpowidnie metody. IMHO sposób zły


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
prond
post
Post #12





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


A może tak :
  1. <?php
  2. function foo()
  3. {
  4. }
  5.  
  6. function bar()
  7. {
  8. foo();
  9. }
  10.  
  11. bar();
  12.  
  13. echo "------n";
  14.  
  15. foo();
  16. ?>


Zobacz co to zwraca - masz informację dot. co wywołało co i w jakiej kolejności.

Ten post edytował prond 4.05.2007, 11:53:43


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post
devnul
post
Post #13





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


@prond: przeczytaj wątek od początku, wspominałem o tym w sowim pierwszym poscie.


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
prond
post
Post #14





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


Sorki, wcześniej nie zauważyłem EDIT'a tylko wykorzystanie wyjątków.


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
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 - 14:55