Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]jak wymusić typ zwracanego przez metodę pola?
Forum PHP.pl > Forum > Przedszkole
-emes-
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
-emes-
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?
dr_bonzo
Huh, dziwne, bo powinno sie dac.

Tzn jaki error dostajesz po wywolaniu kodu


$st->getDescribtion()


aby na pewno nie zrobiles literowki (descriBtion?questionmark.gif)
-emes-
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??
drPayton
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. ?>
-emes-
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 )
drPayton
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...)
-emes-
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
-emes-
gdyby ktos miał podobny prolbem jak ja, to na szybkiego znalazłem taki jeden - PHP Designer


szkoda jedynie, że tylko na windowsa... :-(
dr_bonzo
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()
{

}
-emes-
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.
drPayton
@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.
-emes-
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
dr_bonzo
No niestety to jest wada jezykow dynamicznie typowanych
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.