Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: niezgodność typów argumentów metody
Forum PHP.pl > Forum > PHP > Object-oriented programming
Can I
cześć,

mam interfejs:
  1. <?php
  2. interface UserDAO {
  3.  
  4. public function findUsersByFornameSurnameOrEmail( string $queryStr );
  5.  
  6. }
  7. ?>


i implementację w MySQLUserDAO. testuję to sobie i dostaję taki błąd:

Cytat
Argument 1 passed to MySQLUserDAO::findUsersByFornameSurnameOrEmail() must be an instance
of string, string given, called in (...)


wywołanie w teście wygląda tak:

  1. <?php
  2. $queryStr = "jan";
  3. $actualUsers = $this->dao->findUsersByFornameSurnameOrEmail( $queryStr );
  4. ?>


czy te typy argumentów to muszą być typy zdefiniowane przeze mnie, a nie wbudowane w PHP?
Statozor
Zmienna $queryStr musi być obiektem klasy string inaczej nie wypali
Can I
no a nie jest? winksmiley.jpg
czyli zgaduję, że w PHP5 nie ma jakiegoś auto-boxingu i wbudowanej klasy string czy String, czyli sam bym sobie musiał zdefiniować
Statozor
Sam chciałem tak kiedyś zrobić ale też się nie dało więc doszedłem właśnie do takiego wniosku jak Ty.
Możesz w funkcji sprawdzać typ zmiennej co jest lepsze niż tworzenie nowej klasy dla stringów winksmiley.jpg
batman
Taki zapis

  1. <?php
  2. public function findUsersByFornameSurnameOrEmail( string $queryStr );
  3. ?>


oznacza, że do metody przekazany ma zostać obiekt typu string. W PHP nie ma "wbudowanych" obiektów, tak jak ma to miejsce na przykład w C#. W podanym przez Ciebie przykładzie, do metody przekazujesz łańcuch znaków, a nie obiekt string i przez to zgłaszany jest błąd.
Can I
rozumiem
dr_bonzo
I wymuszac da sie, jak pamietam, tylko obiekty i tablice.
menic
dobrze pamietasz smile.gif
Sedziwoj
I to jest w manualu, więc nie rozumiem czemu od razu nie odesłaliście...
http://www.php.net/manual/en/language.oop5.typehinting.php" title="Zobacz w manualu PHP" target="_manual

Cytat
PHP 5 introduces Type Hinting. Functions are now able to force parameters to be objects (by specifying the name of the class in the function prototype) or arrays (since PHP 5.1).
menic
Sedziwoj: w manualu wszystko jest ;-)
Sedziwoj
Cytat(menic @ 21.04.2007, 19:37:48 ) *
Sedziwoj: w manualu wszystko jest ;-)


Ha ha ha, bardzo śmieszne. Tam masz opisany język, ale nie jak go używać.
To że wiesz jak się tworzy obiekt, nie oznacza że umiesz programować obiektowo.
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.