Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]jak wymusić typ zwracanego przez metodę pola?
--emes--
post 29.11.2007, 21:38:51
Post #1





Goście







witam.

mam mały problem:
  1. <?php
  2. $storagePlace = new StoragePlace("storagePlace");
  3. $storage = new Storage($storagePlace, "storage");
  4. $album = new Album($storage, "name");
  5.  
  6. $st = $album->getStorage();
  7. ?>


chcę teraz na polu $st wywałać metodę klasy Storage, no i nie mogę.
no więc pierwsza myśl - typ zwracany przez metodę getStorage w klasie Album - tyle, że nie wiem jak ten typ określić...
  1. <?php
  2. public function getStorage() {
  3. return $this->storage;
  4. }
  5. ?>


na codzień piszę w javie, więc w php biegły nie jestem.
proszę zatem o pomoc
Go to the top of the page
+Quote Post
--emes--
post 29.11.2007, 21:59:55
Post #2





Goście







co ciekawe
  1. <?php
  2. var_dump($st);
  3. ?>

daje mi efekt tak jaki oczekuję...
Cytat
object(Storage)#2 (3) {
["id:private"]=> NULL
["storagePlace:private"]=> object(StoragePlace)#1 (2) {
["id:private"]=> NULL
["describtion:private"]=> string(12) "storagePlace"
}
["describtion:private"]=> string(7) "storage"
}


to w takim razie, dlaczego nie mogę wywołąć
  1. <?php
  2. $st->getDescribtion()
  3. ?>

pomimo, że getDescribtion() jest metodą klasy Storage?
Go to the top of the page
+Quote Post
dr_bonzo
post 29.11.2007, 22:40:15
Post #3





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

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


Huh, dziwne, bo powinno sie dac.

Tzn jaki error dostajesz po wywolaniu kodu


$st->getDescribtion()


aby na pewno nie zrobiles literowki (descriBtion?questionmark.gif)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
--emes--
post 29.11.2007, 22:42:57
Post #4





Goście







blinksmiley.gif no to się okazało, że działać działa, jedynie eclipse nie podpowiada mi w nim metod klasy Storage... blinksmiley.gif
czemu tak się dzieje? czy jest w ogóle jakiś sposób określenia jaki tym zmiennej ma zwracać metoda??
Go to the top of the page
+Quote Post
drPayton
post 30.11.2007, 02:01:05
Post #5





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Określić w pełnym tego słowa znaczeniu się nie da. Możesz jedynie rzutować typ, ale to z kolei nie obejmuje obiektów, więc musisz tego samodzielnie pilnować, np poprzez
  1. <?php
  2. if(is_object($this->storage)) { return $this->storage; } else { throw new Exception (...)}
  3. ?>
Go to the top of the page
+Quote Post
--emes--
post 30.11.2007, 06:48:02
Post #6





Goście







no tak...
czyli w takiej sytuacji sprawdzam jedynie czy to co zwracam jest obiektem w ogóle, a nie instatncją klasy storage.
ok - coś pokombinuję, żeby było dobrze ;-)

ps.
troszkę nie na temat, ale jakiego środowiska warto użyć, chociażby po to, aby w opisanej przezemnie sytuacji w obiekcie wyciągniętym z innego obiektu, mieć dostęp do metod jego klasy?
tak jak pisał - PDT nie bardzo się sprawdził (co dziwi mnie o tyle, że z javą radzi sobie świtnie... blinksmiley.gif )
Go to the top of the page
+Quote Post
drPayton
post 30.11.2007, 09:59:49
Post #7





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


1. Czekaj, czekaj. Jak najbardziej możesz sprawdzić czy jest instancją danej klasy:
  1. <?php
  2. if($this->storage instanceof Storage)
  3. ?>

2. Radzi sobie z Javą, bo do tego (i w tym winksmiley.jpg ) Eclipse został napisany. Ciekawy jestem, czy ZEND by to potrafił (ale to i tak płatne jest...)
Go to the top of the page
+Quote Post
--emes--
post 30.11.2007, 10:16:23
Post #8





Goście







no przecież...
zupełnie nie pomysłałem...
czyli obejść ustalania zwracanego typu można :-D

co do eclipsa - w sumie masz racje ;-)
chociaż muszę poszukać, że Quanta też mi w tej sytuacji nie pomogła...
no nic - muszę się rozglądnąć za jakiś środowiskiem...

dzięki
Go to the top of the page
+Quote Post
--emes--
post 30.11.2007, 10:28:50
Post #9





Goście







gdyby ktos miał podobny prolbem jak ja, to na szybkiego znalazłem taki jeden - PHP Designer


szkoda jedynie, że tylko na windowsa... :-(
Go to the top of the page
+Quote Post
dr_bonzo
post 30.11.2007, 12:24:10
Post #10





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

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


Cytat
no to się okazało, że działać działa, jedynie eclipse nie podpowiada mi w nim metod klasy Storage...
czemu tak się dzieje? czy jest w ogóle jakiś sposób określenia jaki tym zmiennej ma zwracać metoda??


Masakra, to ze nie podpowiada !== ze nie dziala :/


Skoro w PHP nie ma okreslania typow, to automatycznie nie podpowiada w wiekszosci przypadkow. Uzyj phpdoc'a do okreslenia zwracanych typow, typow parametrow itp:

  1. <?php
  2. /**
  3.  * @return Costam
  4.  */
  5. public function getCostam()
  6. {
  7. ...
  8. }
  9. ?>


i wtedy zadziala

--
gdzie w javie bys to zapisal po prostu

Kod
public Costam getCostam()
{

}


Ten post edytował dr_bonzo 30.11.2007, 12:25:45


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
--emes--
post 30.11.2007, 12:34:41
Post #11





Goście







wiesz, gdy się człowiek przyzwyczai do pewnym udogodnień, to siłą rzeczy trochę go one ogłupić mogą - takie zycie.
natomiast sam kod - działać działa tak czy inaczej, a podane rozwiązanie podpowiadaczowi nie pomogło - i tak się gubi... sadsmiley02.gif

co się zaś tyczy "zwracania typu", to jednak porównanie komentarza, do deklaracji zwracanego typu ma się do siebie nijak... wybacz.
Go to the top of the page
+Quote Post
drPayton
post 30.11.2007, 13:29:46
Post #12





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


@dr_bonzo, jak się domyślam, miał na myśli to, że w momencie dodania takiego komentarza, PDT (jak i ZEND) w momencie wywoływania funkcji w dymku wyświetlą podpowiedź, jaki typ zwraca ta funkcja.
Go to the top of the page
+Quote Post
--emes--
post 30.11.2007, 17:35:09
Post #13





Goście







tak tak - wiem.
ułatwi co sprawę nieco przy korzystaniu z metody, tyle, że sam muszę pamiętać iż takowa tam w ogóle jest.

dziękuję Was wszystkim
Go to the top of the page
+Quote Post
dr_bonzo
post 30.11.2007, 18:05:56
Post #14





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

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


No niestety to jest wada jezykow dynamicznie typowanych


--------------------
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 - 11:36