Dzięki temu, że PHP wprowadził
type hintingMożna mniej więcej doprowadzić w tym języku do wymuszonego silnego typowania - ale to raczej sztuka dla sztuki
Odpowiadając na twoje pytanie:Nie ma to jakiegokolwiek znaczenia
Poza tym, implementując taki kod jak pokazałeś nie sądzę, abyś był zadowolony z faktu, że twoją metodę będzie można wykonać bez parametrów (gdyż obu nadałeś domyślną wartość)
$object->update();
PHP jest językiem słabo-typowanym, więc nawet jeżeli podasz mu tą domyślną wartość jako string.
To mu to nie przeszkodzi, aby upchnąć tam np arraya lub integera, bez żadnego błędu.
Przypisywanie domyślnych wartości służy tylko do definiowania opcjonalnych danych
Takich, które mogą zostać podane
(aby przykładowo rozwinąć funkcjonalność danej metody lub zmienić trochę jej dotychczasowe działanie), ale nie muszą
Jeżeli zależy ci na tym, aby kontrolować to co znalazło się w metodzie jako parametr to musisz sobie samemu tworzyć obsługę silnego typowania rzucając przykładowo wyjątek gdy parametr posiada inny typ niż się spodziewasz - tak jak pokazał poprzednik.
Jeżeli korzystasz z przekazywania obiektów między metodami, możesz korzystać z mechanizmu
type-hintingu, który wymusza, aby parametr był instancja podanej klasy - to również pokazał poprzednik
Array jest dosyć fajnym typem, bo jednocześnie jest nazwą typu
(array) oraz możemy używać
array w type hintingu bez zbędnego kombinowania i wtedy mamy pewność, że parametr będzie tablicą, bo w przeciwnym wypadku PHP rzuci fatal error - to także pokazał ci mój poprzednik.
Cytat
Catchable fatal error: Argument 1 passed to a::b() must be of the type array, integer given, called in /path/to/file.php on line 35 and defined in /path/to/file.php on line 29
Zagłębiając się w genezę to PHP najprawdopodobniej zapożyczył swój type hinting z
Javy, gdzie jest on używany na porządku dziennym:
Kod
public static void nPrintln(String message, int n) {
for (int i = 0; i < n; i++)
System.out.println(message);
}
Podobnie jest zresztą w
C#, tylko że zarówno w nim jak i w javie
(języki obiektowe, silno-typowane), możemy korzystać z type hintingu do oznaczania wszystkich typów np.
(int, string), gdyż tam są one obiektami.
Natomiast w PHP
int oraz string, są zwykłymi typami prostymi, inaczej zwanymi
typami skalarnymi (z stąd także nazwa funkcji is_scalar), przez co nie można ich użyć w zaimplementowanym type hintingu, o czym informuje nas dokumentacja.
Cytat
Type hints can not be used with scalar types such as int or string.
Type hinting w php jest domyślnie dozwolony tylko dla
tablic oraz obiektów - są to typy
złożoneJeżeli jesteś zainteresowany tym tematem to możesz sobie poczytać o przykładowej implementacji silnego typowania PHP
(Sztuka dla sztuki, ale temat bardzo ciekawy - bardziej w celach teoretycznych niż praktycznych)http://php.webtutor.pl/pl/2011/03/23/silne...-w-php-czesc-i/http://php.webtutor.pl/pl/2011/04/12/silne...czalne-obiekty/Ale wracając do głównego tematu:
Być może chodzi ci
o to, aby poinformować drugiego programistę o tym, czego ta metoda się spodziewa
Aby to zrobić możesz użyć bloków
PHPDoc i atrybutów/tagów
@paramPrzykładowo:/**
* @access public
* @param string $value Value to validate
* @param RuleInterface $rule Validation rule
* @return boolean True or false
*/
public function validate($value, RuleInterface $rule)
{
// doing something
}