Olá, Karolina!
Vamos por partes:
1 - Observe que no trecho if(!is_null($this->id)), temos o operador $this, que faz referência ao objeto que está chamando esta função, ou seja, se fizermos:
$estudantePedro = new Student();
$estudantePedro.defineId(1);
O operador $this automaticamente pegará o endereço de memória onde a variável $estudantePedro está armazenada e fará a verificação necessária.
2 - Não teremos id repetido, pois estamos somente pegando o número da coluna (da tabela students) onde o estudante foi salvo no Banco de Dados e atualizando o nosso objeto estudante.
Vou deixar como referência o link da documentação oficial, para que você possa consultar mais detalhes o método lastInsertId(): https://www.php.net/manual/pt_BR/pdo.lastinsertid.php
Espero ter ajudado!
Boa sorte em seus estudos!