tag - PHP: Ejemplo OOP del mundo real
wordpress php get post title by id (7)
Estoy tratando de aprender OOP. Los llamados ejemplos del "mundo real" en los libros que estoy leyendo no ayudan.
Todos los ejemplos como Pet
, Car
, Human
ya no me ayudan. Necesito ejemplos de REAL LIFE que les gusten el registro, las páginas de perfil de usuario, etc.
Un ejemplo:
$user->userName = $_POST[''userName''];//save username
$user->password = $_POST[''password''];//save password
$user->saveUser();//insert in database
También he visto:
$user->user = (array) $_POST;
dónde :
private $user = array();
Mantiene toda la información en una matriz.
Y dentro de esa misma clase mentiras
$user->getUser($uid);
// which sets the $this->user array equal to mysqli_fetch_assoc() using
//the user id.
¿Hay algún ejemplo del mundo real que implemente OOP en las diferentes aplicaciones de php (registro, inicio de sesión, cuenta de usuario, etc.)?
Aunque sé que esta pregunta ya fue respondida, siento que puedo agregar valor aquí.
No creo que deba usar PHP como lenguaje de programación para aprender OOP. Si desea aprender OOP para aplicaciones web, realmente debería estar mirando C # o Java. Una vez que haya aprendido OOP, puede aplicar este conocimiento a PHP. Un ejemplo de un libro que utilicé para aprender OOP fue Big Java by Cay S. Horstmann
¿Por qué digo esto? Debido a que hay literalmente millones de ejemplos en PHP de cómo hacer las cosas, sin embargo, no son muchos ejemplos de cómo programar correctamente. Además de esto, PHP te permite tomar muchos atajos, que no serían aceptables con los gustos de Java. Como tal, si programa PHP con una cabeza Java, entonces creo que será un programador más fuerte. OOP no es específico del idioma, es un paradigma de programación.
Si debe aprender OOP usando PHP, entonces le recomendaría que eche un vistazo a algún código fuente real en repositorios públicos de github. Puede buscarlos en packagist.org. Si son un repositorio público decente, contendrán un archivo readme.md que le mostrará cómo usar los paquetes del compositor. Por ejemplo, https://github.com/moltin/laravel-cart es un ejemplo de un paquete de carrito de compras que usted podría usar en su aplicación. Observe cómo no necesita mirar el código fuente del paquete para comprender qué hacen los paquetes. El paquete se ha escrito, y no le importa cómo funcionan, pero los usa, así que solo necesita saber cómo usarlos. Esto es exactamente de lo que se trata OOP.
No me importa cómo la clase de carrito de la compra agrega un artículo al carro, solo quiero crear un carro nuevo y agregarle algo.
Sin embargo, lo que estás haciendo es sumergirte en el código fuente como una herramienta para entender cómo funciona el OOP.
Además de esto, y probablemente más importante, para el desarrollo de aplicaciones web, investigaría el patrón de diseño de MVC.
El patrón de diseño MVC significa Modelo, Vista, Controlador. En el caso de una aplicación web, The Model es responsable de modelar la base de datos, la vista es responsable de mostrar el contenido al usuario. El controlador es responsable de interactuar con el modelo y manejar la entrada del usuario.
Entonces creo que debería intentar instalar el Marco de Laravel u otro "marco moderno decente" en su máquina local. ¿Por qué digo moderno, porque los marcos modernos requieren una versión PHP mínima de 5.3+ que significa que el PHP en su máquina admitiría OOP real similar a la que obtendría de los gustos de Java.
Hay muchos tutoriales que le mostrarán cómo crear aplicaciones web en laravel. Inmediatamente, verás que cuando creas un controlador, extiendes un BaseController. Cuando creas un Modelo, extiendes Eloquent. Esto significa que ya estará usando Polimorfismo en su código. Verá que al usar clases, se encapsulan y verá que cada clase tiene un rol específico.
Cuando desee interactuar con la base de datos, inicialmente creará un new Model
objeto new Model
dentro de los métodos del controlador. A medida que empiece a aprender más, comenzará a aprender cómo inyectar dependencias en el controlador, luego aprenderá cómo volcar sus modelos y crear repositorios y programas en las interfaces.
Un libro decente sobre cómo aprender Laravel para principiantes sería https://leanpub.com/codebright de Dale Rees. Conocí a Dale en una reunión de Laravel hace aproximadamente 2 semanas.
Además de esto, a medida que seas más hábil construyendo aplicaciones web, comenzarás a aprender cómo aplicar los siguientes principios a tu programación:
- Principio de Responsabilidad Individual
- Principio Abierto Cerrado
- Principio de sustitución de Liskov
- Principio de la Segagación de Interfaz
- Principio de inversión de dependencia
Como dijo Astropanic, podrías echarle un vistazo al código fuente de un buen framework o biblioteca de PHP. Recomiendo Zend Framework , es muy modular y tiene un excelente diseño profesional. Diría que es una muy buena pieza de código PHP orientado a objetos.
Aún así, creo que no es tan fácil aprender de una gran pieza de código de producción, ya que no estaba hecho para enseñarte nada. Pero si quieres un código PHP orientado a objetos del mundo real, el Zend Framework (o Symfony, o quizás CakePHP) es probablemente el camino a seguir.
Compre un libro como "PHP y Mysql aplicaciones diarias para Dummies".
Es viejo, lo sé [2005], pero muestra los conceptos de Inicio de sesión de usuario, Foro, Carritos de compras, etc., tanto en Procedural como en Object Oriented with Mysqli.
Me ayudó a aprender Object Oriented PHP, lo estudié mucho. Bien vale la pena el dinero.
OOP es muy parecido a agrupar partes de tu programa en piezas reutilizables. No es tan difícil ser honesto contigo es solo la idea de empacar tus funciones en clases.
Mini ejemplo del mundo real de cosas OOP a continuación:
BASE DE DATOS DE CLASE
SESIONES DE CLASE
FORMULARIOS WEB DE LA CLASE
EMAIL DE CLASE
CUENTAS DE CLASE (Funciones de ejemplo a continuación)
FUNCIÓN SELECTACCOUNT
FUNCIÓN CHECKPASSWORD
FUNCTION CHECKUSERNAME
FUNCIÓN CREATEACCOUNT
Espero que sigan así, PHP 6 será rediseñado para soportar OOP más que nunca.
¡Buena suerte!
No he ido muy lejos en PHP OOP, pero cuanto más me involucro, más fácil se vuelve. Los ejemplos de objetos están ahí para que entiendas cómo funciona el OOP. Entiendo y he pasado por esto antes, OOP trata solo de propiedades y métodos (variables y funciones normales). Programé en OOP real mismo aplicando los ejemplos de mis tutoriales y no necesariamente tenía que estar en el mundo real. Eso es como haber sido alimentado con cuchara y nunca entenderías OOP y sería fácil de olvidar. Mi consejo aprender a entender. Si comprende, puede hacer cualquier cosa y comprender el poder de OOP. Descargué este libro y creo que tú también deberías hacerlo. Pero eso es como alguien construyendo tus aplicaciones para ti ...
Here un enlace al libro PHP y Mysql Everyday Apps for Dummies
OOP no se trata solo de cómo se ve y funciona una sola clase. También se trata de cómo las instancias de una o más clases trabajan juntas.
Es por eso que ve tantos ejemplos basados en "Cars" y "People" porque realmente hacen un buen trabajo al ilustrar este principio.
En mi opinión, las lecciones más importantes en OOP son la encapsulación y el polimorfismo .
Encapsulación: datos de acoplamiento y la lógica que actúa sobre esos datos juntos de manera concisa y lógica. Polimorfismo: la capacidad de un objeto para parecerse y / o comportarse, como otro.
Un buen ejemplo del mundo real sería algo así como un iterador de directorio. ¿Dónde está este directorio? Tal vez es una carpeta local, tal vez es remota como un servidor FTP. ¡Quién sabe!
Aquí hay un árbol de clase básico que demuestra la encapsulación:
<?php
interface DirectoryIteratorInterface
{
/**
* @return /Traversable|array
*/
public function listDirs();
}
abstract class AbstractDirectoryIterator implements DirectoryIteratorInterface
{
protected $root;
public function __construct($root)
{
$this->root = $root;
}
}
class LocalDirectoryIterator extends AbstractDirectoryIterator
{
public function listDirs()
{
// logic to get the current directory nodes and return them
}
}
class FtpDirectoryIterator extends AbstractDirectoryIterator
{
public function listDirs()
{
// logic to get the current directory nodes and return them
}
}
Cada clase / objeto es responsable de su propio método para recuperar una lista de directorios. Los datos (variables) están acoplados a la lógica (funciones de clase, es decir, métodos) que utilizan los datos.
Pero la historia no ha terminado, ¿recuerdas cómo dije que OOP trata de cómo las instancias de clases funcionan juntas, y no de una sola clase u objeto?
Bien, hagamos algo con esta información: ¿imprimirla en la pantalla? Por supuesto. ¿Pero cómo? HTML? ¿Texto sin formato? RSS? Vamos a abordar eso.
<?php
interface DirectoryRendererInterface
{
public function render();
}
abstract class AbstractDirectoryRenderer implements DirectoryRendererInterface
{
protected $iterator;
public function __construct(DirectoryIteratorInterface $iterator)
{
$this->iterator = $iterator;
}
public function render()
{
$dirs = $this->iterator->listDirs();
foreach ($dirs as $dir) {
$this->renderDirectory($dir);
}
}
abstract protected function renderDirectory($directory);
}
class PlainTextDirectoryRenderer extends AbstractDirectoryRenderer
{
protected function renderDirectory($directory)
{
echo $directory, "/n";
}
}
class HtmlDirectoryRenderer extends AbstractDirectoryRenderer
{
protected function renderDirectory($directory)
{
echo $directory, "<br>";
}
}
Bien, ahora tenemos un par de árboles de clases para atravesar y representar listas de directorios. ¿Cómo los usamos?
// Print a remote directory as HTML
$data = new HtmlDirectoryRenderer(
new FtpDirectoryIterator(''ftp://example.com/path'')
);
$data->render();
// Print a local directory a plain text
$data = new PlainTextDirectoryRenderer(
new LocalDirectoryIterator(''/home/pbailey'')
);
$data->render();
Ahora, sé lo que estás pensando: "¡Pero Peter, no necesito estos grandes árboles de clase para hacer esto!" pero si piensas eso, entonces te estás perdiendo el punto, al igual que sospecho que has estado con los ejemplos de "Coche" y "Personas". No se centre en las minucias del ejemplo; en su lugar, intente comprender lo que está sucediendo aquí.
Creamos dos árboles de clases en los que uno ( *DirectoryRenderer
) utiliza el otro ( *DirectoryIterator
) de una manera esperada; a esto se suele llamar contrato . A una instancia de *DirectoryRenderer
no le importa qué tipo de instancia de *DirectoryIterator
recibe, ni las instancias de *DirectoryIterator
preocupan por cómo se representan.
¿Por qué? Porque los hemos diseñado de esa manera. Simplemente se conectan entre sí y funcionan. Esto es OOP en acción .
Sugiero también ver mi envoltorio Arrayzy . Es una biblioteca nativa de manipulación de matrices PHP en modo OOP.
Por lo tanto, si trabaja con funciones nativas de arreglos de PHP, puede hacer las mismas cosas en OOP y Arrayzy lo ayuda, por ejemplo:
// Functional programming:
$array = [''a'', ''b'', ''c''];
$resultArray = array_merge($array, [''c'', ''d'']);
y
// Object-oriented programming:
$obj = Arrayzy/MutableArray::create([''a'', ''b'', ''c'']);
$obj->mergeWith([''c'', ''d'']);
$resultArray = $obj->toArray();
En ambos casos, la matriz de resultados será:
Array(
0 => ''a''
1 => ''b''
2 => ''c''
3 => ''c''
4 => ''d''
)
Comprueba cómo funciona este método mergeWith (u otro) debajo del capó.
Creo que este es un buen ejemplo que muestra que casi todo el código funcional se puede reemplazar con código OOP como en esta biblioteca. Pero con OOP obtienes mucho más y también puedes consultar la programación funcional versus la pregunta OOP para obtener más información sobre los inconvenientes y los accesorios.
Te aconsejo que te mantengas alejado de cualquier framework en este momento, si no sabes OOP, profundizar en zend o en cualquier otro framework sería demasiado.
PHP OOP es bastante divertido ... como, ja, ja, gracioso, porque es compatible, pero PHP no es un lenguaje OOP como java o c #.
Ejemplo corto para subrayar mi declaración:
// define class
class User {
// define properties and methods
public $name = "";
}
// instantiate class
$user = new User; // or new User() or new user, it''s all the same
echo $user->name;
pero si quieres hacer OOP "sobre la marcha" puedes hacer lo siguiente:
$user = (object) array(''name'' => ''Peter'');
y entonces
$user->name;
pero puede usar OOP como lo haría en Java o en C #, pero no en la misma medida, y tenga en cuenta que los sistemas populares como WordPress y Drupal no son POO puro. pero también puedes hacer herencia y otras cosas de OOP de clasificación en PHP.