Я полагаю, вы неправильно понимаете, что делают статические переменные. Попробуйте этот код, и вы можете лучше понять:
echo getNextQuestionID() . ", " getNextQuestionID() . ", " getNextQuestionID();
И ты поймешь, о чем я.
Статическая переменная живет только столько, сколько работает сценарий.
Причина, по которой он возвращает 0 при первом запуске вместо 1, заключается в том, что вы используете постфиксный оператор $ var ++ вместо префиксной версии - ++ $ var. Разница в том, что приращение применяется только при использовании оператора postfix после возврата функции, но если вы используете оператор префикса, оно применяется до того, как функция вернется.