Порядок параметров haystack и needle в этих двух основных функциях PHP несовместим:
Почему это так?
На начальных этапах развития язык органично развивался, его дизайн не был тщательно продуман. Автор добавил функции, исходя из своих непосредственных потребностей. strpos() (и многие другие строковые функции) являются оболочками стандартных функций библиотеки C с именем name, следовательно, они имеют те же аргументы, что и функции C.
Расмус не пытался написать язык, который стал бы даже на долю процента популярнее, чем PHP. Он очень открыто говорит о несоответствиях - на мой взгляд, в конечном итоге все остальные виноваты в том, что приняли язык вопреки им.






На самом деле они не противоречивы, как многие думают. Вы частично обнаружили последовательность:
Все строковые функции (стог сена, игла)
Все функции массива (игла, стог сена)
Расмус Лердорф (создатель PHP) заявляет об этом в своем выступлении в 2019 году около 25 минут в:
25 лет PHP - phpday 2019
https://thewikihow.com/video_iGOAQli7tGc?t=1485
В 16:45 у него есть слайд под названием «О чем он думал?» и он обращается к «несоответствиям в именах». (проблема иголки / стога сена - лишь одна из них)
https://thewikihow.com/video_iGOAQli7tGc?t=1005
В этом выступлении он также объясняет, что его дизайнерские решения для PHP почти все основаны на идее, что PHP является «оболочкой для базовых библиотек C» и сохраняет параметры в том же порядке, что и базовый код.
Я не думаю, что здесь разрешены вопросы такого типа (выбор языкового дизайна). Однако я не могу найти соответствующий мета-пост для него. Я однажды спросил, почему Swift использует
funcвместоfunction.