Los feature toggles (también llamados feature flags) son una técnica poderosa que permite activar o desactivar funcionalidades sin necesidad de redeploy. Veamos cómo implementarlos efectivamente en PHP.
Son interruptores que controlan el flujo de ejecución de tu aplicación PHP. En lugar de comentar código o crear ramas eternas, simplemente "enciendes" o "apagas" características.
// Ejemplo básico en PHP
$features = [
'new_checkout' => true,
'legacy_search' => false
];
function renderCheckout() {
global $features;
if ($features['new_checkout']) {
return newCheckoutFlow();
} else {
return legacyCheckout();
}
}
Escenario | Solución con Toggles | Beneficio |
---|---|---|
Lanzamiento progresivo | Rollout por porcentaje de usuarios | Mitiga riesgo |
Pruebas A/B | Variantes de features activables | Datos reales |
Mantenimiento | Desactivar features problemáticas | Downtime cero |
Desarrollo | Integración continua sin romper prod | Merge early |
// Ejemplo avanzado con Laravel
class FeatureServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(AnalyticsService::class, function ($app) {
if (config('features.advanced_analytics')) {
return new AdvancedAnalytics();
}
return new BasicAnalytics();
});
}
}
// Uso en controlador
if (Feature::active('new_dashboard')) {
return view('dashboard.v2');
}
✅ Lanzamientos más seguros
✅ Feedback temprano de usuarios reales
✅ Desacoplamiento de deploys y releases
✅ Rollback instantáneo
⚠️ Deuda técnica: Limpieza periódica de toggles obsoletos
⚠️ Complejidad: Uso de herramientas como Unleash o Flagsmith
⚠️ Testing: Implementar tests específicos para combinaciones
// Ejemplo complejo con estrategias de rollout
use Flagsmith\FlagsmithClient;
$flagsmith = new FlagsmithClient('your_environment_key');
$userFeatures = $flagsmith->getIdentityFlags($userId);
if ($userFeatures->isFeatureEnabled('recommendation_engine')) {
$engineVersion = $userFeatures->getFeatureValue('engine_version');
match ($engineVersion) {
'v2' => $recommendations = getV2Recommendations($userId),
'v3' => $recommendations = getV3Recommendations($userId),
default => $recommendations = getDefaultRecommendations($userId)
};
}
billing.new_processor
> new_feature_23
// Ejemplo con Symfony y rollout gradual
class FeatureController extends AbstractController
{
#[Route('/experimental')]
public function experimentalFeature(): Response
{
if ($this->featureManager->isEnabled('beta_feature') &&
$this->userManager->isInRolloutGroup($user, 30)) {
return $this->render('experimental.html.twig');
}
return $this->render('standard.html.twig');
}
}
Los feature toggles son esenciales para equipos modernos de PHP, permitiendo:
La clave está en implementarlos de forma organizada y con procesos definidos para evitar la acumulación de deuda técnica. ¿Ya usas feature toggles en tus proyectos PHP?
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.