Я просматривал некоторые функции PHP и не мог не заметить следующее:
<?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)
?>
Обратите внимание на array_key_exists()
и property_exists()
функцию. В первом случае имя свойства (ключ для массива) является первым параметром, а во втором - вторым параметром. Интуитивно можно ожидать, что они будут иметь аналогичную подпись. Это может привести к путанице, и время разработки может быть потрачено впустую, делая исправления такого типа.
Разве PHP или какой-либо другой язык не должны учитывать согласованность сигнатур связанных функций?