Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dostęp do klasy poprzez funkcje innej klasy, ??
sztosz
post 28.08.2005, 13:10:58
Post #1





Grupa: Zarejestrowani
Postów: 866
Pomógł: 32
Dołączył: 2.06.2004
Skąd: Wrocław

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


Mam sobie klasę:
  1. <?php
  2.  
  3. //klasa jest zawsze uzywana i tylko raz do obróbki $_POST i wszystko zapisuje w ta
    blicy $tablicaA
  4. class A {
  5.  
  6. public $tablicaA;
  7.  
  8. public function funkcjaA(){
  9. //funkcja do wyciągania odpowiedniej zmiennej z $tablicaA;
  10. }
  11.  
  12. }
  13. //zainicjujemy ją
  14.  
  15. $classA = new A();
  16.  
  17. ?>


I jak teraz z drugiej klasy dostać się do tej pierwswzej? Czy to będzie działać, i dlaczego nie i co zrobić z zasięgiem zmiennych?

  1. <?php
  2.  
  3. class B {
  4.  
  5. private $b;
  6.  
  7. public function funkcjaB(){
  8. $this->b = $classA->funkcjaA();
  9. }
  10.  
  11. }
  12. ?>


I czy
  1. <?php
  2. A::funkcjaA()
  3. ?>
jest jakimś rozwiązaniem, a jeżeli tak to jak to działa?

Następne małe pytanko to, czy jeżeli klasa się nazywa 'JakaśKlasa' to czy fukcja 'uruchomiana" automatycznie przy stworzeniu obiektu może się nazywać 'jakaśKlasa' czy musi 'JakaśKlasa' ?

________
PS: OOP jest dla mnie dosyć nowym zagadnieniem i nie za bardzo wiem jak rozwikłać zagwozdki igdzie ich szukać sad.gif a manual lekko mi miesza w głowie w tym temacie sad.gif


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
NuLL
post 28.08.2005, 13:23:19
Post #2





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

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


  1. <?php
  2.  
  3. class B {
  4.  
  5. private $b;
  6.  
  7. public function funkcjaB(){
  8. global $classA;
  9.  
  10. $this->b = $classA->funkcjaA();
  11. }
  12.  
  13. }
  14. ?>


--------------------
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
sztosz
post 28.08.2005, 13:34:39
Post #3





Grupa: Zarejestrowani
Postów: 866
Pomógł: 32
Dołączył: 2.06.2004
Skąd: Wrocław

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


Czyi jeżeli dobrze rozumiem, 'global' daje do zrozumienia funkcji/etc że to co jest po 'global' znajduje się gdzieś w "całym" skrypcie i ma wyjść z tym szukaniem poza scoope funkcji? Nigdy global nie musiałem uzywać i chyba źle interpretowałem jejgo (keyworda) znaczenie winksmiley.jpg. Wielkie dzięki za szybką odpowiedź smile.gif


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 28.08.2005, 13:35:46
Post #4





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 to będzie działać, i dlaczego nie i co zrobić z zasięgiem zmiennych?

1. Bo jest "poza funkcja/metoda" (jak w przypadku zwyklych metod).
2. Z tym "global" to jeden wielki syf -- kod klasy jest zalezny od skryptu, ktory jej uzywa.
3. lepiej np. tak (mozna tez przekazac $classA w konstruktorze lub innej metodzie):
  1. <?php
  2. class A
  3. {
  4.     public $tablicaA;
  5.  
  6.     public function funkcjaA(){
  7.         //funkcja do wyciągania odpowiedniej zmiennej z $tablicaA;
  8.     }
  9.  
  10. }
  11.  
  12. //zainicjujemy ją
  13.  
  14. $classA = new A();
  15.  
  16.  
  17. class B {
  18.  
  19.     private $b;
  20.  
  21.     public function funkcjaB( $a ){
  22.         $this->b = $a->funkcjaA();
  23.     }
  24.  
  25. }
  26.  
  27. $objectB = new B();
  28. $objectB->funkcjaB( $classA ); // <<<<<<<<<<<
  29.  
  30. ?>


Cytat
Następne małe pytanko to, czy jeżeli klasa się nazywa 'JakaśKlasa' to czy fukcja 'uruchomiana" automatycznie przy stworzeniu obiektu może się nazywać 'jakaśKlasa' czy musi 'JakaśKlasa' ?


Piszesz w php5 wiec "konstruktor" nazywa sie zawsze "__construct()" i problem odpada.

Cytat
A::funkcjaA()

Tego nie mozesz uzyc: chcesz wywolac statyczna metode klasy a jako takiej jej nie zadeklarowales.

-
Pola powinny byc tylko prywatne/chronione (hermetyzacja) no chyba ze inaczej sie tego nie da zrobic lub nie popsuje ci to obiektu.

Ten post edytował dr_bonzo 28.08.2005, 13:37:27


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
sztosz
post 28.08.2005, 15:46:18
Post #5





Grupa: Zarejestrowani
Postów: 866
Pomógł: 32
Dołączył: 2.06.2004
Skąd: Wrocław

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


@dr_bonzo: Wielkie dzięki za rozjaśnienie biggrin.gif, zakapowałem jak to robić i mi się coraz bardziej to OOP podoba.

A czy statyczne metody klasy można wyawoływać nie posiadając żadnego obektu danej klasy?

I czy jeżeli chce mieć dostęp do jakiegoś pola(?), zmiennej danego obiektu(jak w przykładzie $tablicaA) to powinienem napisać odpowiednią metodę danej klasy do tego? Na tym polega hermetyzacja?

Aha i czy __construct() ma być private/public/etc, czy nie? Bo w manualu przykłady są bez tych flag(?). U mnie jest private i zend code analyzer nie zgłasza wontów.

______
PS. Jeżeli to zle forum to przerzućcie to gdzie indziej winksmiley.jpg

Ten post edytował sztosz 28.08.2005, 16:15:43


--------------------
Go to the top of the page
+Quote Post
M4chu
post 28.08.2005, 17:31:14
Post #6





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

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


Tak, statyczne metody wlasnie po to sa, nie ma potrzeby posiadania obiektu bo przeciez nawet z niego nie kozystamy: NazwaKlasy::nazwaMetody();
Co do hermentyzacji to i tak i nie, niektore pola nie powinny wogole wychodzic poza obreb klasy (np haslo uzytkownika), inne natomiast mozna modyfikowac/poierac zapomoca getterow i setterow.
Przewaznie konstruktor jest publiczny, zeby moznabylo gdziekolwiek uzyc new Klasa(). Konstruktor jaknajbardziej moze byc prywatny, wtedy nie mozemy w skrypcie zrobic new Klasa(), tylko musimy skozystac z metody statycznej (no bo nie mamy obiektu w skrypcie smile.gif), ktora to ten obiekt stworzy - patrz: Singleton.

pozdro
Go to the top of the page
+Quote Post
dr_bonzo
post 28.08.2005, 17:52:33
Post #7





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

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


Dodam jeszcze:
metody statyczne (static) sa to metody klasy, wywolujesz je:
NazwaKlasy::metoda()
lub z obiektu tej klasy
self::metoda().
metody niestatyczne -- metody obiektow:
$this->metoda(), itd.

Cytat
Aha i czy __construct() ma być private/public/etc, czy nie? Bo w manualu przykłady są bez tych flag(?). U mnie jest private i zend code analyzer nie zgłasza wontów.

Nie zglasza errorow bo wszsytkie opcje sa poprawne -- zalezy tylko co chcesz za ich pomoca uzyskac (patrz: ^^^ M4chu ).

Cytat
I czy jeżeli chce mieć dostęp do jakiegoś pola(?), zmiennej danego obiektu(jak w przykładzie $tablicaA) to powinienem napisać odpowiednią metodę danej klasy do tego? Na tym polega hermetyzacja?

Hermetyzacja polega na tym ze obiekty udostepniaja tylko metody (swoj interfejs -- ktorym operujesz na obiektach), to jak one przechowywuja dane powinno byc ukryte przed pozostalymi obiektami. Np.
* masz pole
public $name;
* inny obiekt odczytuje to pole
* w koncu postanawiasz zmienic nazwe tego pola na 'nazwaCzegostam', i co? musisz przeszukac wszystkie pozostale obiekty i poprawic kod w miejscu, w ktorym uzywaly one tego pola

a mozesz tez zrobic tak:
  1. <?php
  2. private $nazwaCzegostam
  3. public function getName() // << getter
  4. {
  5. return $this->nazwaCzegostam;
  6. }
  7.  
  8. ?>


^^^ To jest wlasnie hermetyzacja.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
sztosz
post 29.08.2005, 09:13:59
Post #8





Grupa: Zarejestrowani
Postów: 866
Pomógł: 32
Dołączył: 2.06.2004
Skąd: Wrocław

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


Serdecznie wam dziękuję za wyjaśnienia. Naprawdę wiele to rozjaśnilo, jeszcze tylko google->singleton biggrin.gif


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 29.08.2005, 09:18:33
Post #9





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

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


http://wiki.php.pl/index.php/Singleton


--------------------
Nie lubię jednorożców.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:09