Это абсолютно нормально - для этого и созданы языки с динамической типизацией, но с оговорками. В целом подобного стоит избегать, если преимущества динамической типизации не ущемляются при подобном избегании (чего не происходит в 95% случаев), т.к. это потенциально затрудняет работу с кодом.
В вашем примере при логауте стоит делать unset($_SESSION['user']), или session_unset.