Przeglądałem niektóre funkcje PHP i nie mogłem nie zauważyć:
<?php
function foo(&$var) { }
foo($a); // $a is "created" and assigned to null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
Zwróć uwagę na funkcję array_key_exists()
i property_exists()
. W pierwszym z nich nazwa właściwości (klucz do tablicy) jest pierwszym parametrem, natomiast w drugim jest drugim parametrem. Intuicyjnie można oczekiwać, że będą mieli podobny podpis. Może to prowadzić do zamieszania, a czas opracowywania może zostać zmarnowany przez wprowadzenie tego typu poprawek.
Czy PHP czy jakikolwiek inny język nie powinien rozważać spójności podpisów powiązanych funkcji?