Clase de servicio PHP con lógica separada

Resumen

Separar la lógica de respuesta en una clase de servicio es la práctica que diferencia un script desordenado de un proyecto PHP profesional. Aquí aprenderás a construir una clase FakeAIService dentro de la carpeta src, conectarla mediante autoload y consumirla desde tu ejecutable, manteniendo un código limpio, reutilizable y fácil de mantener.

Por qué separar la lógica en una clase de servicio en PHP

Cuando toda la lógica vive dentro del ejecutable, el proyecto se vuelve difícil de leer y mantener. Aislar las respuestas en una clase de servicio te permite escalar funcionalidades sin tocar el punto de entrada de la aplicación.

¿Qué es una clase de servicio? Es una clase que encapsula una responsabilidad específica de tu aplicación, como interactuar con una API o generar respuestas. Su objetivo es desacoplar la lógica del ejecutable principal.

En este caso, la clase trabajará con respuestas falsas, simulando la interacción con un servicio externo antes de conectarlo a uno real.

Cómo se estructura la clase FakeAIService dentro de src

Dentro de la carpeta src creas un archivo nuevo y defines el namespace App, tal como quedó configurado previamente en el composer.json. Después declaras la clase con su método principal.

php

<?php namespace App; class FakeAIService { public function obtenerRespuesta(string $pregunta): string { sleep(2); return $pregunta; } } El método `obtenerRespuesta` recibe una pregunta como texto y retorna otro texto. Aquí cambia un detalle clave frente a la versión anterior: ya no usas `echo`, porque la responsabilidad de imprimir le corresponde al ejecutable, no al servicio. La instrucción `sleep(2)` simula el tiempo de procesamiento de un servicio real. ### Cómo instanciar la clase usando autoload En el ejecutable principal incorporas el *autoload* de Composer y luego instancias el objeto para usar su método. php require __DIR__ . '/../vendor/autoload.php'; use App\FakeAIService; $aiService = new FakeAIService(); $respuesta = $aiService->obtenerRespuesta($pregunta); echo $respuesta . PHP_EOL; Al ejecutar `./bin/nombre-ejecutable` y escribir *Hola*, el sistema espera dos segundos y devuelve *Hola*. Eso confirma que la conexión entre el ejecutable y la clase funciona. ## Cómo validar preguntas con str_contains y comparación estricta Una respuesta más útil distingue si la pregunta tiene relación con PHP. Para eso usas la función nativa `str_contains` dentro de un `if`. php if (str_contains($pregunta, 'PHP') !== false) { return $pregunta; } else { return 'Ey, solo respondo preguntas acerca de PHP'; } La comparación estricta con `!== false` es el detalle técnico más importante de esta lógica. > **¿Por qué usar comparación estricta en PHP?** Porque cuando una coincidencia aparece en la posición `0`, PHP interpreta ese cero como `false` en condiciones no estrictas. Sin `!==`, tu validación fallaría justo cuando la palabra clave está al inicio. Si preguntas *¿Qué es PHP?*, el sistema detecta la palabra y devuelve la respuesta. Si escribes *Hola*, responde con el mensaje alternativo. Sin la comparación estricta, una pregunta como *PHP es genial* (donde *PHP* está en la posición cero) sería tratada como falsa y nunca entraría en el `if`. ### Qué función de PHP detecta texto dentro de una cadena `str_contains` es una función nativa de PHP que verifica si una cadena contiene otra. Retorna `true` o `false`, pero al combinarla con búsquedas por posición debes recordar siempre el caso del índice cero. Por eso la comparación estricta con `!==` es tu mejor aliada cuando trabajas con cadenas. ## Cómo crece un proyecto PHP limpio y ordenado La estructura final deja el ejecutable enfocado en orquestar y la clase enfocada en responder. Esa división de responsabilidades es lo que permite que un proyecto crezca sin convertirse en un caos. - Aísla cada lógica en una clase de servicio independiente. - Usa *namespaces* coherentes con tu configuración de Composer. - Apóyate en el *autoload* para evitar `require` manuales en cada archivo. - Aplica comparaciones estrictas cuando trabajes con funciones que retornan posiciones. Con esta base ya puedes experimentar. Como desafío, crea respuestas creativas dentro de tu `FakeAIService`: detecta varias palabras clave, devuelve mensajes distintos según el tema o simula tiempos de respuesta variables. ¿Qué respuestas vas a programar tú?