Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Metoda wewnątrz metody
daniel1302
post
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Witam w teście na php.pl napotkałem na takie pytanie.
I czy może mi ktoś wytłumaczyć jak to wygląda, ja sobie uświadamiam, że to takie coś


  1. <?php
  2. Class Klasa
  3. {
  4. function metoda1()
  5. {
  6. function metoda2()
  7. {}
  8. }
  9. }
  10. ?>


Oto pytanie
Klasa posiada metodę z metodą wewnątrz niej. Jak możemy się odwołać do metody ujętej w innej metodzie?
$klasa->metoda1().metoda2()
$klasa.metoda1().metoda2()
$klasa->fmetoda1(metoda2())
$klasa->metoda1()->metoda2() - Ja to zaznaczyłem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
daniel1302
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


To musi być któreś z tych rozwiązań
$klasa->metoda1().metoda2()
$klasa.metoda1().metoda2()
$klasa->fmetoda1(metoda2())
$klasa->metoda1()->metoda2()
Go to the top of the page
+Quote Post
#luq
post
Post #3





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Przecież metoda nie może mieć metody. Musisz stworzyć obiekt
  1. <?php
  2. class Object2
  3. {
  4.    public function bar(){
  5.         echo 'bla';
  6.    }
  7. }
  8.  
  9. class Object
  10. {
  11.    public foo;
  12.    
  13.    public function __construct(){
  14.        $this->foo= new Object2();
  15.    }
  16. }
  17.  
  18. $o = new Object();
  19. $o->foo->bar();
  20. ?>


//edit
zapomniałem function (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)

Ten post edytował #luq 11.04.2009, 18:47:47
Go to the top of the page
+Quote Post
#luq
post
Post #4





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Powiem szczerze o takim czymś nie wiedziałem.

Co nie znaczy, że mylę się pisząc:
Cytat
metoda nie może mieć metody

Metody mogą mieć tylko obiekty a, że metoda nie jest obiektem nie może mieć metod.

Tak samo działa i takie coś:
  1. <?php
  2. function a(){
  3.    function b(){
  4.        echo 'bla';
  5.    }
  6. }
  7.  
  8. a().b();
  9. ?>

I co w tym wypadku? Funkcja ma metodę?
belliash wytłumacz mi w, którym miejscu napisałem bzdurę/bzdury?

Co do tego odwoływania się do funkcji, funkcji to jakoś przypomina mi to C++. Tam do zmiennej obiektowej odwołujemy się przez operator kropki, natomiast jak mamy wskaźnik to przez strzałkę (->). W PHP jest na odwrót z tego wynika. Myślałem, że w PHP nie ma wskaźników jako takich. Czyli w PHP jest tak jak np. w C++, funkcja jest wskaźnikiem do miejsca, gdzie ona jest zapisana, i możemy to w jakiś sposób wykorzystać? Ogólnie, mógłby wytłumaczyć mi ktoś ten zapis z kropką? Na jakiej zasadzie to działa.

Ten post edytował #luq 11.04.2009, 19:09:04
Go to the top of the page
+Quote Post
#luq
post
Post #5





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat(belliash @ 11.04.2009, 20:17:20 ) *
Nie mniej jednak @#luq przepraszam bo nie zrozumielismy sie z mojej winy (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)

Urazy nie czuję (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Mało się spotyka ludzi, którzy umieją się przyznać do błędu, więc za to Cie szanuję.

Cytat
$klasa->metoda1().metoda2(); bo w chwili wykonania metody metoda1() zostanie w global scope utworzona funkcja o nazwie metoda2() i mozna ja zwyczajowo wykonac:

$klasa->metoda1();
metoda2();


To jest dla mnie zrozumiała. Dopiero po pierwszym wywołaniu funkcji, jej kod jest wykonywany, a więc i funkcja b() jest dopiero w tym momencie deklarowana:
  1. <?php
  2. function a(){
  3.        function b(){
  4.            echo 'bla';
  5.        }
  6.    }
  7.  
  8.    // b(); <- nie zadziała
  9.    a();
  10.    b();  // tu już zadziała
  11. ?>


Korzystając z poprzedniej funkcji, dlaczego przy wywołaniach:
  1. <?php
  2. a();
  3. a().b();
  4. b();
  5. ?>


Wyskakuję:
Kod
<b>Fatal error</b>:  Cannot redeclare b()

Przecież, ja nie redeklaruję funkcji b(); (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)

Może ktoś wytłumaczyć za co odpowiada kropka w zapisie
  1. <?php
  2. a().b();
  3. ?>

Bo konkatenacja, to to nie jest (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
#luq
post
Post #6





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat(belliash @ 11.04.2009, 20:51:02 ) *
Redeklarujesz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a(); -> deklarujesz;
a().b(); -> redeklarujesz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Yhm... inaczej na to patrzałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Myślałem, że:
Kod
a().b();

wywołuje tylko funkcje b(), a jest tak jak mówisz:
Kod
a().b();

To to samo co:
Kod
a();
b();
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:56