"require_once" e "include_once" son generalmente un poco más lentos que simplemente "requieren" e "incluyen" porque realizan una comprobación si el archivo ya se ha cargado antes.
Pero la diferencia solo importa en aplicaciones realmente complejas en las que debe realizar la carga automática de todas formas y por eso no necesitaría require_once/include_once, si su autocargador está bien codificado.
En la mayoría de las aplicaciones simples, es mejor usar el require_once/include_once por razones de conveniencia.
El enfoque del protector de la cabecera es un código desordenado que debe evitarse. Solo imagine, si olvidó ese control en uno de muchos archivos. Depuración que podría ser una pesadilla.
Simplemente use la carga automática si su aplicación es adecuada para ello. Es rápido y la forma más conveniente y limpia.
¿Es esto un cuello de botella en el rendimiento de su código? –