El uso de globales hace que su código sea difícil de probar, por lo que es más propenso a errores, no es seguro e impredecible. Es por eso que pasamos las variables que queremos dentro de una función / objeto. Entonces mi pregunta es simple:
¿Violan $ _POST, $ _GET, etc., el principio de encapsulación ?
Estoy pensando que, para retener el control de esas variables de una manera OO, una solución ideal sería agregar algunas líneas como esta al código:
// Convert the $_GET array to an object
$get = json_decode(json_encode($_GET), FALSE); // stackoverflow.com/a/1869147
// Stop it from being included from anywhere
unset($_GET);
// Small example of what could be done later on
$DB = new PDO(/* ... */);
$Person = new Person($DB, $get->id);
No he visto esto en ningún lado, ni siquiera un tutorial ni recomendación. Además, podemos ver claramente cómo el código anterior es mucho más fácil de probar que uno que incluye $Person = new Person($DB, $_GET['id']);
o incluso (lo feo), $Person = new Person($DB);
ya que puede usar un $get
objeto simulado .
¿El código anterior está en la dirección correcta o me falta algo?
EDITAR: Después de un poco de investigación ( Zend framework y Cake PHP ) como sugirió Alexander Kuzmin, parece ser lo correcto. Probablemente sean demasiado grandes para que yo pueda cavar en el código ATM, pero lo tendré en cuenta.
fuente