Ma dichiarando le variabili di classe come private non è inutile questo provvedimento? E non vale la stessa cosa anche con protected?
No, non è inutile. Se fosse come dici, un codice come il seguente sarebbe permesso, pur ponendo problemi di interpretazione:

Codice PHP:
class User() {
    private 
$_firstName;
    
    public function 
__construct($firstName$lastName) {
        
$_firstName $firstName;
    }

$_firstName fa riferimento alla proprietà privata oppure ad una variabile locale del metodo __construct()?