C'est assez rare comme utilisation (tu me l'a fait découvrir :D)
Alors pour résumé tu as ta class (on va appeller A qui a cette méthode "forge")
Imaginons que tu as la classe B qui extend de A
Si tu fais A::forge() ça retourne A (jusque là rien de fou (un new suffirait)
Si tu fais un B::forge() ça retourne B
Jpense que l'avantage c'est de pouvoir déclarer une sorte de constructeur commun au sous objet.