Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Logika w PHP
seaquest
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Otóż mam sobie metodę klasy Member:
  1. <?php
  2. /**
  3.  * Finds a row by specified key
  4.  *
  5.  * @param string $key
  6.  * @return Zend_Db_Table_Row|null
  7.  * @author Michal Plachta
  8.  **/
  9. public function findByKey( string $key )
  10. {
  11. return $this->fetchRow( array( 'key = ?' => $key ) );
  12. }
  13. ?>


Wywołuję ją w sposób następujący:
  1. <?php
  2. $member = new Member;
  3. $current = $member->findByKey( $key );
  4. ?>


I co dostaję?
Cytat
Argument 1 passed to Member::findByKey() must be an instance of string, string given ...


I gdzie tu logika? Dodam tylko, że analogiczna sytuacja dla typu array działa.
Daję na Hydepark, bo nie jest to dla mnie problem nie do rozwiązania. Traktuję to raczej jako ciekawostkę. Jak ktoś uzna, że trzeba przenieść, niech przeniesie.

Ten post edytował seaquest 20.09.2007, 23:49:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Stricte dyskusj to ja nie widziałem - powtarzam tylko słowa developerów, którzy przy okazji komentowania próśb o wymuszanie typów argumentów powiedzieli, że jest to niezgodne z ideą php.
Co do typów wartości zwracanych - nie zgadzam się, że nie ma sensu przy braku takiego samego mechanizmu przy argumentach. Wywołujący funkcję (użytkownik kodu) musi zadbac o poprawne argumenty, ale już to, co otrzyma niekoniecznie musi mu odpowiadać. Dam taki przykład:
  1. <?php
  2. class someData
  3. {
  4. function getData($bool=false)
  5. {
  6. if($bool)
  7. {
  8. return new dataObject();
  9. }
  10. else
  11. {
  12. return array("no", "data");
  13. }
  14.  
  15. }
  16. }
  17. $obj=new someData()
  18. $data=$obj->getData();
  19. // i teraz nastepują testy
  20. if(is_array($data)){}
  21. elseif(is_object($data)){}
  22. ?>

Gdyby metoda getData() miała ustalony typ wartości zwracanej, to testy niebyłyby potrzebne. Odpowiedzialnośc spadłaby na metodę getData(), która musiałaby zwracać np. tablicę.
  1. <?php
  2. function Array getData($bool=false)
  3. {
  4. if($bool)
  5. {
  6. $obj=new dataObject();
  7. return $obj->getAsAray(); //albo jak kto tam chce
  8. }
  9. else
  10. {
  11. return array("no", "data");
  12. }
  13.  
  14. }
  15. ?>


Niweluje to trochę zamętu w kodzie. Ja czasami piszę tak, jakby oba obiekty były umówione co do typu, ale to utrudnia wysledzenie błędu, bo musze go szukać w dwóch obiektach. Omijam zatem testowanie, co może się odbić czkawką przy późniejszyxch zmianach. Gdyby dali mi możliwość wymuszenia typu - od razu miałbym błąd i nie musiałbym odtwarzać procesu, który do niego doprowadził. Tak się dzieje najczęsciej, gdy zwrócona wartość nie wpływa bezpośrednio na kod użytkownika, ale jest jedynie zapamiętana i wykorzystana w jakimś odległym miejscu, albo (o zgrozo!) zapisana.

Pozdrawiam.
Go to the top of the page
+Quote Post

Posty w temacie
- seaquest   Logika w PHP   20.09.2007, 23:46:56
- - envp   ROTFL seaquest wstiiid Narzucać typ można tylk...   21.09.2007, 00:20:00
- - Jabol   @seaquest: no bo to jest logika php. Możesz wymusz...   21.09.2007, 00:26:14
- - seaquest   No właśnie, ja się nie wstydzę. To jest niekonsekw...   21.09.2007, 00:31:33
- - Sedziwoj   Do tego wymuszenie typu array jest dodane od 5.1 w...   21.09.2007, 07:35:31
- - Cysiaczek   Moim skromnym zdaniem można się jedynie przyczepić...   21.09.2007, 07:40:31
- - Sedziwoj   @Cysiaczek Nakieruj mnie na dyskusję o sprawdzaniu...   21.09.2007, 11:36:45
- - Cysiaczek   Stricte dyskusj to ja nie widziałem - powtarzam ty...   22.09.2007, 11:12:55
- - Sedziwoj   Raczej powinieneś robić: [PHP] pobierz, plaintext ...   22.09.2007, 14:04:32
- - Cysiaczek   CytatRaczej powinieneś robić: Nie chodzi...   22.09.2007, 15:14:26
- - Sedziwoj   I tak musi sprawdzać co przekazuje, czy musi spraw...   22.09.2007, 15:29:26
- - pawel_k   @Cysiaczek ale zobaczy na cos takiego jak jest w p...   22.09.2007, 18:03:44
- - athabus   Brak typowania (zarówno wejścia jak i wyjścia) to ...   24.09.2007, 10:36:43
- - Ace   Dynamiczne typy zawsze były zaletą PHP'a... Zm...   24.09.2007, 14:15:25
- - athabus   Nie mam zamiaru porzucać php ponieważ z mojej pers...   24.09.2007, 14:32:05
- - Sedziwoj   My się domagamy, bo robimy coś "więcej" ...   24.09.2007, 15:06:41
- - kwiateusz   ale przeciążanie jak i typowanie byłoby imo opcjon...   24.09.2007, 20:46:41
- - Cysiaczek   Tylko, że i tak php musiałoby sprawdza...   24.09.2007, 20:51:09
- - Sedziwoj   Cytat(Cysiaczek @ 24.09.2007, 21:51:0...   24.09.2007, 21:48:44


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: 10.10.2025 - 03:55