Ups programación php. Preservar la funcionalidad original de un método al reescribir métodos. Algunos conceptos básicos

11 de marzo de 2010 a las 11:37

POO con ejemplos (parte 1)

  • Proceso educativo en TI.

Por voluntad del destino, tengo que leer un curso especial sobre patrones de diseño en una universidad. El curso especial es obligatorio, por eso los alumnos que vienen a mí son muy diferentes. Por supuesto, entre ellos también hay programadores en ejercicio. Pero, desafortunadamente, la mayoría de las personas tienen dificultades incluso para comprender los términos básicos de la programación orientada a objetos.

Para ello, intenté explicar los conceptos básicos de la POO (clase, objeto, interfaz, abstracción, encapsulación, herencia y polimorfismo) utilizando ejemplos más o menos vivos.

La primera parte a continuación trata sobre clases, objetos e interfaces.
ilustra la encapsulación, el polimorfismo y la herencia.

Conceptos básicos de programación orientada a objetos

Clase
Imagina que estás diseñando un coche. Ya sabes que un coche debe contener motor, suspensión, dos faros, 4 ruedas, etc. También sabes que tu coche debe poder acelerar y frenar, girar y dar marcha atrás. Y, lo más importante, sabrá exactamente cómo interactúan el motor y las ruedas, según qué leyes se mueven el árbol de levas y el cigüeñal, así como cómo están diseñados los diferenciales. Confías en tus conocimientos y empiezas a diseñar.

Describes todas las partes que componen tu automóvil, así como también cómo estas partes interactúan entre sí. Además, se describe lo que debe hacer el usuario para que la máquina frene o encienda. luz alta faros El resultado de tu trabajo será un boceto. Acabas de desarrollar lo que en OOP se llama Clase.

Clase es una forma de describir una entidad que define un estado y un comportamiento que depende de este estado, así como reglas para interactuar con esta entidad (contrato).

Desde el punto de vista de la programación, una clase puede considerarse como un conjunto de datos (campos, atributos, miembros de la clase) y funciones para trabajar con ellos (métodos).

Desde el punto de vista de la estructura del programa, una clase es tipo complejo datos.

En nuestro caso, la clase mostrará una entidad: un automóvil. Los atributos de clase serán el motor, la suspensión, la carrocería, las cuatro ruedas, etc. Los métodos de clase serán "abrir la puerta", "pisar el acelerador" y también "bombear una porción de gasolina del tanque de gasolina al motor". Los dos primeros métodos están disponibles para que otras clases los ejecuten (en particular, la clase "Driver"). Este último describe interacciones dentro de la clase y no es accesible para el usuario.

Además, a pesar de que la palabra "usuario" está asociada con Solitario y " Microsoft Word", nos referiremos a los programadores que utilizan su clase como usuarios, incluido usted mismo. Llamaremos desarrollador a la persona que es el autor de la clase.

Objeto
Hiciste un gran trabajo y las máquinas desarrolladas según tus planos están saliendo de la línea de montaje. Aquí están, parados en ordenadas filas en el patio de la fábrica. Cada uno de ellos repite exactamente tus dibujos. Todos los sistemas interactúan exactamente como usted los diseñó. Pero cada coche es único. Todos tienen números de carrocería y de motor, pero todos estos números son diferentes, los coches difieren en color y algunos incluso tienen piezas fundidas en lugar de ruedas estampadas. Estos coches son esencialmente objetos de tu clase.

Objeto (instancia) Es un individuo representante de una clase que tiene un estado y un comportamiento específicos que están enteramente determinados por la clase.

Discurso en lenguaje sencillo, un objeto tiene valores de atributos específicos y métodos que operan sobre esos valores según las reglas definidas en la clase. En este ejemplo, si la clase es un automóvil abstracto del "mundo de las ideas", entonces el objeto es un automóvil concreto que se encuentra debajo de las ventanas.

Interfaz
Cuando nos acercamos a una máquina de café o nos ponemos al volante, iniciamos una interacción con ellos. Normalmente, la interacción se produce mediante un determinado conjunto de elementos: una ranura para aceptar monedas, un botón para seleccionar una bebida y un compartimento para dispensar un vaso en una máquina de café; volante, pedales, palanca de cambios en un coche. Siempre hay un conjunto limitado de controles con los que podemos interactuar.

Interfaz es un conjunto de métodos de clase que están disponibles para que los utilicen otras clases.

Obviamente, la interfaz de una clase será el conjunto de todos sus métodos públicos junto con un conjunto de atributos públicos. Esencialmente, una interfaz especifica una clase, definiendo claramente todo. posibles acciones encima de eso.
Un buen ejemplo de una interfaz sería panel automóvil, que le permite llamar a métodos como aumentar la velocidad, frenar, girar, cambiar de marcha, encender los faros, etc. Es decir, todas las acciones que otra clase (en nuestro caso, el conductor) puede realizar al interactuar con el coche.

Al describir una interfaz de clase, es muy importante lograr un equilibrio entre flexibilidad y simplicidad. Una clase con una interfaz sencilla será fácil de usar, pero habrá problemas que no podrá resolver. Al mismo tiempo, si la interfaz es flexible, lo más probable es que consista en suficientes métodos complejos Con un gran número parámetros que te permitirán hacer muchas cosas, pero su uso estará plagado de grandes dificultades y el riesgo de cometer un error al mezclar algo.

Ejemplo interfaz sencilla un automóvil con transmisión automática puede servir. Cualquier rubia que haya realizado un curso de conducción de dos semanas podrá dominar su funcionamiento muy rápidamente. Por otro lado, para dominar el control de un avión de pasajeros moderno se necesitan varios meses, o incluso años, de duro entrenamiento. No me gustaría estar a bordo de un Boeing pilotado por alguien que tenga dos semanas de experiencia de vuelo. Por otro lado, nunca conseguirás un coche para despegar y volar de Moscú a Washington.

PHP es uno de los más populares. lenguajes de scripting programación. Casi el 60% de los servidores web utilizan PHP Cada mes se desarrollan millones de sitios web y aplicaciones web en PHP.

PHP se desarrolló originalmente como un simple reemplazo de Perl y en un par de años se había vuelto extremadamente poderoso y popular. lenguaje PHP, en sí mismo es muy similar a ANSI C.
Una de las razones por las que PHP se ha vuelto tan popular es su corta curva de aprendizaje.

Aprender PHP no es nada difícil, especialmente si estás familiarizado con sintaxis de java o c.

Entonces como escribir scripts PHP En pocas palabras, cualquiera puede escribir código PHP sin seguir ninguna convención y sin mezclar la capa de presentación con la lógica empresarial (esta es una de las principales razones de existencia). gran cantidad proyectos no gestionados). Debido a que PHP no necesariamente tiene convenciones de codificación estrictas, con el paso de los años, a medida que el proyecto crece cada vez más, se convierte en una aplicación enorme e inmanejable.

La programación orientada a objetos o POO se utiliza bien en la práctica de la programación para crear proyectos manejables más fácilmente.
El enfoque procesal implica escribir código de programa sin utilizar objetos. La programación procesal implica escribir código con o sin rutinas.

La programación orientada a objetos entrena cualquier lenguaje de programación para producir un mejor código de programa y se utiliza para producir mejores rendimiento alto y redactar grandes proyectos sin miedo a confundirse en su gestión. La programación orientada a objetos le brinda la posibilidad de crear objetos reutilizables para que usted u otros desarrolladores puedan usarlos en sus proyectos sin tener que rediseñarlos una y otra vez. La programación orientada a objetos elimina las barreras y la complejidad al escribir y administrar aplicaciones grandes.

PHP nos permite escribir aplicaciones de 2 formas diferentes, la primera es procedimental y la segunda orientada a objetos. Si aún no comprende la diferencia entre estos dos enfoques, veamos estos fragmentos de código: el mismo ejemplo escrito en diferentes enfoques.

Procesal:

$entrada_usuario = $_POST['campo'];
$filtered_content = filtro($user_input); //filtrado de entrada del usuario
mysql_connect("dbhost", "dbuser", "dbpassword"); //base de datos
mysql_select_db("nombrebd");
$sql = "alguna consulta";
$resultado = mysql_query($sql);
mientras ($datos = mysql_fetch_assoc())
{
proceso($datos);
}
Process_user_input($filtered_content);

Y aquí está el mismo código usando programación orientada a objetos:

$input_filter = nuevo filtro();
$input_filter->filter_user_input(); //filtrar las entradas del usuario
$db = nuevo dal("mysql"); //capa de acceso a datos
$db->connect($dbconfig);//estábamos usando mysql
$resultado = $db->ejecutar($sql);
ReportGenerator::makereport($resultado); //procesar datos
$modelo = nuevo Postmodelo($filtro->get_filtered_content());
$modelo->insertar();

Si observa detenidamente estos dos fragmentos de código, notará que el código que utiliza programación orientada a objetos es más legible y más fácil de entender.

El código con programación orientada a objetos está mejor organizado porque está claro qué objeto se procesa con qué. Las aplicaciones grandes escritas utilizando un enfoque procedimental se vuelven casi imposibles de percibir después de que se han lanzado varias versiones. Por supuesto, puede seguir reglas estrictas para escribir el código de un programa, pero están aprobadas por millones de desarrolladores que saben que, en última instancia, esto no le brindará control y usabilidad del proyecto si no usa programación orientada a objetos en su programa.
Casi todas las aplicaciones grandes están escritas usando Orientación a Objetos
acercarse.

Con base en lo anterior, podemos extraer las ventajas de usar programación orientada a objetos:

La programación orientada a objetos se creó para hacer la vida más fácil a los desarrolladores. Con la programación orientada a objetos puedes dividir tus grandes problemas en pequeños problemas que son mucho más fáciles de resolver.
El principal requisito de la programación orientada a objetos: haz todo lo que quieras hacer como objetos. Los objetos son pequeños fragmentos de código separados que pueden combinar datos y propiedades. En las aplicaciones, todos los objetos interactúan entre sí.

La programación orientada a objetos se puede considerar mejor desde diferentes ángulos, especialmente cuando el tiempo de desarrollo y el desarrollo posterior de la aplicación son importantes para usted.
Las principales ventajas de utilizar POO se pueden expresar como:

* Reutilizar: Un objeto es un objeto lógico que tiene un conjunto de propiedades y métodos y puede interactuar con otros objetos. Un objeto puede ser completamente independiente o puede depender de otros objetos. Generalmente se crea un objeto para resolver problemas específicos. Por lo tanto, cuando otros desarrolladores encuentran problemas similares, pueden conectar su clase a su proyecto y usarla sin temor a que interrumpa su proceso de desarrollo. Esto evita DRY, que significa No repetirte. En programación procedimental o modular, reutilizar posible sólo en conjunto.

* Refactorización: Cuando necesita utilizar la refactorización en un proyecto, la programación orientada a objetos le brinda las máximas ventajas, ya que todos los objetos son elementos pequeños y contienen sus propiedades y métodos como parte de sí mismos. Esto hace que la refactorización sea relativamente fácil de usar.

* Extensibilidad: Si necesita ampliar la funcionalidad de su proyecto, puede lograr mejores resultados utilizando programación orientada a objetos. Una de las principales características de la programación orientada a objetos es la extensibilidad. Puede utilizar la refactorización de objetos para agregar funcionalidad. Al trabajar en esto, aún puedes guardar
la compatibilidad anterior del objeto; por lo tanto, puede trabajar bien con el código anterior. O puedes expandir el objeto y crear uno completamente nuevo que contendrá todo. propiedades necesarias y métodos del objeto principal del que se deriva el nuevo, y luego agregarle nuevas funciones. Esto se llama “herencia” y es muy importante oportunidad POO.

* Apoyo: el código orientado a objetos es más fácil de mantener porque
Sigue convenciones de codificación muy estrictas y está escrito de forma que se explica por sí mismo.
Por ejemplo, cuando un desarrollador agrega, reelabora o depura código, puede encontrar fácilmente estructura interna código y mantener el código de vez en cuando. Además, cuando tienes un equipo de desarrolladores trabajando en tu entorno, la programación orientada a objetos puede ser una mejor solución, ya que puedes distribuir tu código entre los miembros del equipo después de dividirlo en partes pequeñas. Estas pequeñas partes se pueden desarrollar como objetos separados, por lo que los desarrolladores pueden trabajar casi de forma independiente unos de otros. En última instancia, combinar todas las partes en una sola aplicación no será difícil.

* Eficiencia: La idea de POO en realidad se desarrolló para aumentar la eficiencia y facilitar el proceso de desarrollo. Se desarrollan varios patrones de diseño para crear un código bueno y más eficiente.
Además, en OOP puede reflexionar sobre sus decisiones de una manera más conveniente que con un enfoque procesal. Debido a que divide su problema en varios problemas pequeños y encuentra una solución para cada uno de ellos por separado, gran problema se resuelve solo.

P.D. Mi primer habratopic, si te gusta, traduciré más el libro, ya que para mí es bastante interesante e informativo.

Si encuentra errores críticos en la traducción, deje comentarios. Definitivamente tus comentarios serán tenidos en cuenta. De todos modos, espero que encuentres Este artículo muy útil.

Hay muchos ejemplos diferentes y sencillos que muestran cómo funciona la programación orientada a objetos. Hoy decidí mostrarte cómo funciona la POO (Programación Orientada a Objetos) V vida real; Este ejemplo será especialmente útil para programadores novatos. Al crear una clase en MYSQL CRUD (CRUD - crear, leer, actualizar, eliminar - “Creación, leer, actualizar, eliminar”), puede crear, leer, actualizar y eliminar registros fácilmente en cualquiera de sus proyectos, independientemente de cómo esté diseñada la base de datos.

Una vez que comprenda lo que necesitamos, podrá crear fácilmente un esqueleto para nuestra clase. Primero, necesitamos incluir en la clase las funciones básicas para trabajar con MySQL. Se requieren las siguientes características.

  • Seleccionar
  • Insertar
  • Borrar
  • Actualizar
  • Conectar
  • Desconectar

A continuación se muestra la definición de nuestra clase. Tenga en cuenta que todos los métodos que creé utilizan palabra clave público

Base de datos de clase (función pública conectar() ( ) función pública desconectar() ( ) función pública seleccionar() ( ) función pública insertar() ( ) función pública eliminar() ( ) función pública actualizar() ( ) )

función conectar()

Esta función será bastante simple, pero antes de escribirla, necesitaremos definir algunas variables. Solo se debe poder acceder a las variables dentro de la clase, por lo que cada variable está precedida por la palabra clave privada. Todas las variables (host, nombre de usuario, contraseña, nombre de la base de datos) se utilizan para conectarse a la base de datos. datos mysql. Después de esto podemos crear una consulta simple a la base de datos MySQL. Por supuesto, como programadores, debemos esperar cualquier cosa de los usuarios y, en base a esto, debemos tomar ciertas precauciones. Podemos verificar: si el usuario ya está conectado a la base de datos, entonces, en consecuencia, no necesita volver a conectarse a la base de datos. De lo contrario, podemos utilizar las credenciales del usuario para conectarnos.

Privado db_host = ''; usuario_db privado = ''; db_pass privado = ''; nombre_bd privado = '';

/* * Conéctese a la base de datos, solo se permite una conexión */ public function connect() ( if(!$this->con) ( $myconn = @mysql_connect($this->db_host,$this->db_user,$ this- >db_pass); if($myconn) ( $seldb = @mysql_select_db($this->db_name,$myconn); if($seldb) ( $this->con = verdadero; devuelve verdadero; ) else ( devuelve falso ; ) ) más (devuelve falso; ) ) más (devuelve verdadero; ) ) Como puede ver arriba, utilizamos básicos Funciones MySQL

y haga una pequeña verificación de errores para asegurarse de que todo vaya según lo planeado. Si el usuario se ha conectado a la base de datos, devolvemos verdadero; de lo contrario, devolvemos falso. Como beneficio adicional, configuramos la variable (con) en verdadero si se establece la conexión.

Desconexión de función pública()

La función verifica la variable de conexión para ver si existe. Si se establece la conexión (existe una conexión), cierre la conexión a la base de datos MySQL y devuelva verdadero. De lo contrario, no es necesario que hagas nada.

Función pública desconectar() ( if($this->con) ( if(@mysql_close()) ( $this->con = false; devolver verdadero; ) else ( devolver falso; ) ) )

Seleccionar función pública() Lleguemos a la parte donde las cosas se complican un poco. Comenzamos a trabajar con los argumentos del usuario y devolvemos los resultados de la consulta. No necesitamos usar los resultados en este momento, pero sí necesitamos crear una variable en la que almacenaremos resultados personalizados para consultas de la base de datos. Además, también crearemos nueva característica , que comprobará si hay en la base de datos. Esta función se creará por separado, ya que todas nuestras operaciones CRUD requerirán dicha verificación. Esto limpiará un poco nuestro código y ayudará aún más a optimizarlo. A continuación se muestra una función para verificar tablas (tableExists) y una variable pública con los resultados de las consultas.

Privado $resultado = matriz();

/* * Comprobar la existencia de una tabla al ejecutar una consulta * */ función privada tableExists($table) ( $tablesInDb = @mysql_query("MOSTRAR TABLAS DE ".$this->db_name." LIKE "".$table ."") ; if($tablesInDb) ( if(mysql_num_rows($tablesInDb)==1) ( devuelve verdadero; ) else ( devuelve falso; ) )

Esta función simplemente verifica la presencia de la tabla requerida en la base de datos. Si la tabla existe, devolverá verdadero; de lo contrario, devolverá falso.

/* * Recuperando información de la base de datos * Requerido: tabla (nombre de la tabla) * Opcional: filas (columnas requeridas, delimitador de coma) * donde (columna = valor, pasado como una cadena) * orden (clasificación, pasada como una cadena) * / función pública seleccionar( $tabla, $filas = "*", $donde = nulo, $orden = nulo) ( $q = "SELECCIONAR ".$filas." FROM ".$tabla; if($donde != nulo ) $q .= " DONDE ".$dónde; if($order != null) $q .= " ORDEN POR ".$order if($this->tableExists($table)) ( $consulta = @mysql_query; ($q); if($consulta) ( $this->numResults = mysql_num_rows($consulta); for($i = 0; $i numResults; $i++) ( $r = mysql_fetch_array($consulta); $clave = array_keys($r) ; para($x = 0; $x 1) $this->resultado[$i][$clave[$x]] = $r[$clave[$x]]; ($consulta) resultado = nulo; más $this->resultado[$clave[$x]] = $r[$clave[$x]]] devuelve verdadero;

La siguiente sección contiene el código verdaderamente mágico. El punto es este: recopile los datos solicitados de la tabla. Luego asignamos nuestro resultado a una variable. Para simplificar el resultado para el usuario final, usaremos nombres de columnas en lugar de claves numéricas. Si el número de filas en la tabla es mayor que uno, el resultado será una matriz bidimensional en la que la primera clave es el número (incremento) y la segunda clave es el nombre de la columna. Si la tabla tiene solo una fila, se devolverá una matriz unidimensional cuyos nombres de clave corresponden a los nombres de las columnas de la tabla. Si no se encuentran filas en la tabla, la variable de resultado se establecerá en nulo. Como dije antes, todo parece un poco confuso, pero una vez que divides el código en secciones separadas, todo se vuelve mucho más simple y claro.

Insertar función pública()

Esta característica es un poco más sencilla que las anteriores. Simplemente le permite insertar información en la base de datos. Por tanto, además del nombre de la tabla, necesitaremos argumentos adicionales. Necesitaremos una variable que contendrá los valores relevantes para insertar en la tabla. Luego simplemente separaremos cada valor con una coma. También verificamos la presencia de la tabla deseada usando la función tableExists y creamos una consulta de inserción manipulando los argumentos pasados ​​a la función insert(). Luego enviamos nuestra solicitud a la dirección deseada.

/* * Insertar valores en la tabla * Requerido: tabla (nombre de la tabla) * valores (valores insertados, se pasa una matriz de valores, por ejemplo, * matriz(3,"Nombre 4"," [correo electrónico protegido]");) * Opcional: * filas (el nombre de las columnas donde insertamos valores se pasa como una cadena, * por ejemplo, "título,meta,fecha" * */ public function insert($table,$values ,$filas = nulo) ( if ($this->tableExists($table)) ( $insertar = "INSERTAR EN ".$tabla; if($filas!= nulo) ( $insertar .= " (".$filas ."""; ) para( $i = 0;< count($values); $i++) { if(is_string($values[$i])) $values[$i] = """.$values[$i]."""; } $values = implode(",",$values); $insert .= " VALUES (".$values.")"; $ins = @mysql_query($insert); if($ins) { return true; } else { return false; } } }

Como puede ver, esta función es bastante simple en comparación con escribir consultas de selección en la base de datos. De hecho, la función de eliminación será aún más sencilla.

función pública eliminar()

Esta función simplemente elimina una tabla o filas de nuestra base de datos. Por lo tanto, necesitamos pasar el nombre de la tabla y un argumento opcional que defina la condición donde a la función. En la condición que sigue a la palabra clave WHERE, hay una aclaración: eliminar una fila, filas o la tabla completa. Si se omite la cláusula donde, se eliminarán todas las filas. Luego se realiza una solicitud de eliminación y se ejecuta la solicitud.

/* * Eliminar una tabla o registros que cumplan la condición * Requerido: tabla (nombre de la tabla) * Opcional: donde (condición), pasado como una cadena, por ejemplo, "id=4" */ función pública eliminar($table, $dónde = nulo) ( if($this->tableExists($table)) ( if($dónde == nulo) ($eliminar = "BORRAR ".$tabla; ) else ( $eliminar = "BORRAR DE ".$ tabla." DONDE ". $dónde; ) $del = @mysql_query($eliminar); if($del) (devuelve verdadero; ) else (devuelve falso; ) ) más (devuelve falso; ) )

Finalmente, pasemos a nuestra última función principal. Esta función se utiliza para actualizar una fila en la base de datos con nueva información. Esta función A primera vista es difícil de entender, pero esto no es del todo cierto. Usaremos los mismos principios que antes. Por ejemplo, los argumentos se utilizarán para redactar la solicitud de actualización. También comprobaremos la existencia de la tabla utilizando el método tableExists. Si la tabla existe, actualice la fila correspondiente. La parte más difícil, por supuesto, es donde escribimos la solicitud de actualización. Dado que la declaración de actualización tiene la regla de actualizar todas las filas a la vez, debemos tener esto en cuenta y ajustar este punto correctamente. Entonces, decidí pasar la condición donde como una matriz simple. El primer argumento de esta matriz es el nombre de la columna, el siguiente argumento son los valores de la columna. entonces todos número par(incluido 0) corresponde al nombre de la columna y cada número impar contiene un valor impar. El código relevante está a continuación:

Para($i = 0; $i

En la siguiente sección, crearemos la parte de actualización de la declaración configurando las variables. Como puedes cambiar cualquier valor numérico, preferí una matriz codificada por nombre de columna y nuevos valores. Por lo tanto, todo lo que tenemos que hacer es verificar el tipo de valor y dónde debemos colocar la coma. Ahora que hemos escrito las dos partes principales de la declaración de actualización, no es difícil completar la declaración de actualización. El código se presenta a continuación:

Actualización de función pública($table,$rows,$where,$condition) ( if($this->tableExists($table)) ( // Analiza los valores donde // los valores pares (incluido 0) contienen el donde las filas // los valores impares contienen las cláusulas de la fila for($i = 0; $i

Entonces, hemos terminado de crear la última función y nuestra clase para trabajar con CRUD puede considerarse completa. Ahora puedes crear nuevas entradas, lee entradas individuales de la base de datos, actualizar registros y eliminar. Además, una vez que comience a reutilizar esta clase, descubrirá que ahorra mucho tiempo y líneas de código. Es decir, sentirá la efectividad y las ventajas de la programación orientada a objetos.

Uso

Entonces hemos creado nuestra clase, pero ¿cómo la usamos? Aquí todo es sencillo. Comencemos creando una base de datos simple para probar nuestra clase. Creé una base de datos de prueba y compilé una declaración mysql simple. Puedes ponerlo en cualquier base de datos.


La primera línea está comentada porque no siempre es necesaria. Si necesita ejecutar el código anterior más de una vez, deberá descomentar la primera línea para asegurarse de que se cree la tabla.

Ahora que nuestra tabla está creada y completada, es hora de ejecutar algunas consultas simples.

conectar(); $db->select("mysqlcrud"); $res = $db->getResult(); print_r($res); ?>

Si todo se hace correctamente, verá lo siguiente:

De manera similar, podemos ejecutar una consulta de actualización y generar los resultados.

update("mysqlcrud",array("nombre"=>"¡Cambiado!"),array("id",1),"="); $db->update("mysqlcrud",array("nombre"=>"Cambiado2!"),array("id",2),"="); $res = $db->getResult(); print_r($res); ?>

Producción:

Ahora insertemos la entrada:

insert("mysqlcrud",array(3,"Nombre 4"," [correo electrónico protegido]")); $res = $db->getResult(); print_r($res); ?>

Del autor: La programación profesional moderna es simplemente impensable sin la programación orientada a objetos, que en secreto se ha convertido en una especie de estándar. lenguajes de alto nivel programación y, por supuesto, PHP no es una excepción. Pero sucede que la transición de un estilo de programación procedimental a uno basado en objetos va acompañada de algunas dificultades para los principiantes, por lo que hoy veremos los conceptos básicos de programación orientada a objetos PHP.

Primero, veamos las principales ventajas del enfoque orientado a objetos para comprender por qué se ha generalizado tanto.

El código del enfoque orientado a objetos es bastante fácil de entender y leer y es excelente para implementar proyectos muy complejos y a gran escala.

Las aplicaciones escritas utilizando este enfoque de programación se modernizan y amplían fácilmente.

Las aplicaciones correctamente diseñadas consisten en módulos individuales, lo que significa que, si es necesario, se pueden perfeccionar y actualizar rápidamente, lo que aumenta la velocidad de desarrollo en varios órdenes de magnitud.

Ahora que se han identificado las principales fortalezas del estilo de codificación en cuestión, podemos pasar directamente a la esencia de esta lección.

Entonces, la base de la programación orientada a objetos en PHP es el principio de vincular datos y funciones que los manipulan en los objetos correspondientes. Lo cual es algo diferente del enfoque procesal habitual, donde elementos similares se definen por separado unos de otros. Es decir, los objetos contienen cierta información que se almacena en sus propiedades (llamadas variables de objeto) y un cierto conjunto de acciones que se describen en sus métodos (de hecho, funciones ordinarias). En este caso, los métodos, por regla general, en su trabajo operan sobre datos almacenados en propiedades, lo que implica tanto lectura, escritura como cambio.

En consecuencia, podemos decir que la base de la metodología de programación orientada a objetos en PHP es trabajar con objetos o utilizarlos para manipular datos.

En este caso, el objeto se forma a partir de previamente cierta clase, y este último describe completamente su estructura y actúa como una especie de plantilla. En otras palabras, la clase describe las propiedades y métodos de los objetos creados en el futuro. Y esto se puede ver en el siguiente ejemplo.

clase Cliente ( público $nombre; $pedidos protegidos; función pública __construct($nombre, $pedidos) ( $this->nombre = $nombre; $this->pedidos = $pedidos; ) función pública getName() ( return $this ->nombre; ) ) $cliente = nuevo Cliente("Ben", matriz("id" => 10)); echo $cliente->getName();

clase Cliente(

nombre$público;

pedidos $ protegidos;

función pública __construct ($nombre, $pedidos) (

$this -> nombre = $nombre ;

$ esto -> pedidos = $ pedidos;

función pública getName() (

devolver $este -> nombre;

$cliente = nuevo Cliente("Ben", array("id" => 10));

echo $cliente -> getName();

Al implementar una instancia de una clase (es decir, crear un nuevo objeto utilizando una clase de interés específica), se forma un nuevo objeto y también se determinan las propiedades descritas en la clase. Además, se lanza para su ejecución un método especial llamado __construct(), a menos que, por supuesto, esté descrito en la estructura de la clase. Como puede ver, para crear un objeto se utiliza la palabra clave new, seguida del nombre de la clase. Entre paréntesis, si es necesario, se pasan argumentos al método anterior, que, por regla general, define algunos datos iniciales para el objeto futuro.

En el ejemplo anterior, además de crear un objeto, se llama al método getName() y se muestra el valor que devuelve. Por supuesto, como resultado de la operación del script, veremos el resultado del nombre de usuario: "Ben", porque es esto el que se pasa como primer argumento al método constructor, donde se escribe en la propiedad de clase en el nombre nombre. En consecuencia, el método anterior devuelve el valor de esta propiedad.

Al mismo tiempo, nadie le prohíbe crear otro objeto similar a partir de la clase descrita anteriormente:

$cliente2 = nuevo Cliente("Sem", array("id" => 15)); echo $cliente2->getName();

$cliente2 = nuevo Cliente("Sem", array("id" => 15));

echo $cliente2 -> getName();

En este caso, en la pantalla veremos el nombre de un usuario completamente diferente: "Sem". Por lo tanto, esencialmente creamos un objeto completamente diferente a partir de la misma plantilla: una clase. Al mismo tiempo, de este objeto, datos iniciales completamente diferentes, que todavía están formados por el método constructor, lo que significa que su comportamiento, determinado por los métodos, también será diferente.

Tenga en cuenta que las propiedades de una clase y sus métodos solo se pueden usar con un objeto específico; esto es exactamente lo que se puede ver en el ejemplo, y sin él, son absolutamente inútiles en términos de trabajar fuera de la clase, porque dentro de la clase. clase, por supuesto, se pueden utilizar en el código de sus métodos. Además, el acceso a los elementos anteriores de un objeto se realiza a través de un conjunto especial de signos "->" (flecha), delante del cual es necesario indicar el objeto de interés, o el puntero del objeto: la palabra clave $this. El puntero de objeto $this se usa en el código de métodos directamente dentro de la clase para acceder a sus propiedades o métodos.

Y nuevamente, vemos que la base del desarrollo de programación orientada a objetos en PHP es trabajar con objetos, y lo bueno es que describimos la clase una vez, lo que significa que formamos un cierto conjunto de datos y la funcionalidad necesaria. Y luego creamos objetos, cada uno de los cuales, dependiendo de los datos iniciales, será absolutamente único.

De lo anterior se deduce que la clase a partir de la cual se crearán los objetos describe los datos y la funcionalidad de una determinada entidad del proyecto futuro, por ejemplo, trabajar con usuarios, páginas, menús, direcciones, etc. Y, por supuesto, si hay varias entidades de este tipo, entonces es necesario crear varias clases, lo que significa que se creará al menos un objeto para cada una de ellas. Aunque no siempre, a veces algunas clases se crean como padres para ciertas clases secundarias y, por lo tanto, actúan como almacenamiento, algunas funcionalidad general, lo que naturalmente implica la creación de toda una jerarquía de clases para el futuro proyecto. Pero este es un tema completamente diferente que no entra en el alcance del presente artículo.

De hecho, aquí repasamos brevemente los conceptos básicos de la programación orientada a objetos en PHP. Ciertamente, este tipo programación requerida más atención, en lugar de un artículo, si realmente desea comprenderlo bien y utilizarlo en su trabajo. Más detalles este tema revisado en el curso premium.

¡¡¡Todo lo mejor para ti y feliz codificación!!!

En este tutorial aprenderá los conceptos básicos de la programación orientada a objetos en PHP. Aprenderá sobre los principios de la programación orientada a objetos en general y aprenderá a escribir scripts simples en PHP.

¡Bienvenido a la primera de una serie de lecciones sobre programación orientada a objetos en PHP! Al completar todas las lecciones de esta serie, aprenderá sobre los principios y conceptos básicos de la programación orientada a objetos y aprenderá a crear rápida y fácilmente aplicaciones útiles en PHP.

En este tutorial comenzaré a ponerte al día y te contaré los conceptos básicos de la programación orientada a objetos. Aprenderás:

  • ¿Qué es la programación orientada a objetos?
  • cómo la programación orientada a objetos te ayudará a crear mejor php guiones
  • algunos conceptos básicos como clases, objetos, métodos, variables de clase
  • dónde empezar a escribir un script PHP

¿Estás listo para sumergirte en el mundo? objetos PHP? ¡Entonces adelante!

¿Qué es la programación orientada a objetos?

Si alguna vez creó y utilizó funciones personalizadas en PHP, utilizó un estilo de programación procedimental. EN programación procesal normalmente crea estructuras de datos: números, cadenas, matrices, etc. - almacenar algunos datos y luego procesar estas estructuras funciones especiales, que manipulan estos datos.

La programación orientada a objetos, u OOP, ha avanzado porque aquí almacenamos estructuras de datos y las funciones que las procesan en una única entidad llamada objeto. En lugar de procesar los datos con alguna función, carga esos datos en un objeto y luego llama a sus métodos para manipularlos y obtener el resultado deseado.

Muy a menudo, los objetos creados con programación orientada a objetos reflejan entidades reales. Por ejemplo, si está creando un foro para su sitio, crearía un objeto Miembro que almacenará información sobre cada miembro del foro (nombre, inicio de sesión, correo electrónico, contraseña, etc.), así como métodos que procesarán esta información ( registro, autorización, cierre de sesión, prohibición, etc.).

¿Por qué utilizar programación orientada a objetos?

Procedimental y orientado a objetos son dos formas diferentes de hacer la misma cosa. Esto no quiere decir que uno de ellos sea mejor que el otro: cada uno escribe como quiere, por lo que incluso puedes combinar fácilmente estos dos enfoques en un solo guión.

Sin embargo, aquí hay algunos beneficios de la programación orientada a objetos para los desarrolladores:

  • Es más fácil reflejar situaciones reales: como señalé anteriormente, los objetos reflejan entidades reales: personas, productos, mapas, artículos de blogs, etc. Esto simplifica enormemente la tarea cuando recién comienza a diseñar su aplicación, ya que el propósito de cada objeto Es como un objetivo: las relaciones entre objetos serán claras y comprensibles.
  • Más fácil de escribir programas modulares: La programación orientada a objetos implica escribir módulos. Al dividir su código en módulos, le resultará más fácil administrarlo, depurarlo y ampliarlo.
  • Es más fácil escribir código que se usará muchas veces: escribir código que se pueda usar más de una vez ahorrará tiempo al escribir una aplicación y, con el tiempo, incluso podrá crear una biblioteca completa de este tipo de módulos que podrá usar en muchas ocasiones. aplicaciones. Con la programación orientada a objetos, resulta comparativamente más fácil escribir dicho código, ya que las estructuras de datos y funciones se encapsulan en un único objeto que se puede utilizar cualquier número de veces.

Algunos conceptos básicos

Antes de comenzar a escribir scripts, debe tener una buena comprensión de los conceptos de clase, objeto, variable de clase y método.

Clases

Una clase es un marco para un objeto. Este es un fragmento de código que define:

  • Tipos de datos que contendrán los objetos de clase creados
  • Funciones que contendrán estos objetos.

Cuando crea una aplicación POO, generalmente creará varias clases que representarán varios tipos entidades de su aplicación. Por ejemplo, para crear un foro, puede crear las clases Foro, Tema, Publicación y Miembro.

Objetos

Un objeto es un tipo especial de variable que se crea a través de una clase. Contiene datos reales y funciones para manipularlos. Puedes crear tantos objetos como quieras a partir de una sola clase. Cada función de un objeto es independiente de otro objeto, incluso si están creados a partir de la misma clase.

Para comparación con entidades reales:

  • Una clase es el marco de un automóvil: define cómo se verá y actuará el automóvil, pero sigue siendo una entidad abstracta.
  • Un objeto es un coche real creado a partir de una estructura alámbrica: tiene propiedades reales (como la velocidad) y comportamiento (como la aceleración o el frenado).

Nota: Un objeto a menudo se denomina esencia de una clase y el proceso de creación de un objeto de una clase se denomina implementación.

Variables de clase

Los valores de datos que se almacenan en un objeto particular se escriben en variables especiales llamadas variables de clase. Las variables de clase están estrechamente asociadas con su objeto. Aunque todos los objetos de una clase tienen las mismas variables, sus valores pueden diferir.

Métodos

Las funciones definidas en una clase y utilizadas en objetos de esa clase se denominan métodos. No son muy diferentes de las funciones normales: puede pasarles valores, pueden contener variables locales y valores de retorno. Sin embargo, los métodos suelen funcionar con variables de objeto. Por ejemplo, el método login() para iniciar sesión en su foro podría establecer la variable de clase loggedIn en verdadero.

¿Cómo crear una clase en PHP?

Ahora que ya sabes qué son las clases, métodos, variables de clase y objetos, es hora de crear un par de clases y objetos en código PHP.

Primero, veamos cómo crear realmente una clase. Básicamente, el script para crear una clase se ve así:

Clase NombreClase ( // (definición de clase) )

Por ejemplo, si estás creando una clase de miembro para tu foro, escribirías esto:

Miembro de clase ( // (definición de clase) )

Es bastante simple. Naturalmente, esta clase no hará nada hasta que le agregue variables y métodos. Sin embargo, el código anterior crea una clase PHP válida que se puede utilizar.

Regla de buenos modales: colocar cada clase en archivo separado con el mismo nombre que el nombre de la clase. Por ejemplo, coloque la clase Miembro en el archivo Member.php y guárdela en una carpeta, por ejemplo, clases.

¿Cómo crear objetos en PHP?

Puedes crear un objeto usando la nueva palabra clave:

Nuevo nombre de clase()

Este código creará un objeto. clase Nombre de clase. Necesitará utilizar este objeto más adelante, por lo que deberá almacenarlo en una variable. Por ejemplo, creemos un objeto de la clase Miembro y almacenémoslo en la variable $miembro:

$miembro = nuevo miembro();

También podemos crear otro objeto de la misma clase:

$miembro2 = nuevo miembro();

Aunque creamos estos dos objetos a partir de la misma clase, las variables $miembro y $miembro2 son independientes entre sí.

Crear variables de clase

Ahora que ya sabemos cómo crear clases y objetos de clase, veamos cómo crear variables de clase. Hay 3 descriptores de acceso para variables de clase que se pueden agregar a una clase:

  • Variables de clase pública (públicas): accesibles, es decir se pueden leer y/o modificar - en cualquier parte del script, independientemente de dónde se encuentre este código - dentro o fuera de la clase
  • Variables de clase privada (privadas): accesibles solo para métodos de clase. Es mejor hacer que las variables de clase sean privadas para separar los objetos del resto del código.
  • Variables de clase protegidas: Disponibles para métodos de tu propia clase, así como para métodos de clases heredadas (hablaremos de herencia más adelante).

Para crear una variable de clase, escriba la palabra clave pública, privada o protegida y luego ingrese el nombre de la variable:

Clase NombreClase ( público $nombrepropiedad; privado $nombrepropiedad; protegido $nombrepropiedad; )

Agreguemos una variable de clase pública a nuestra clase Miembro para almacenar el nombre de usuario:

Miembro de la clase ( public $nombre de usuario = ""; )

Observe que hemos inicializado nuestra variable de clase, su valor es la cadena vacía, "". Esto significa que cuando se crea un nuevo usuario, el nombre de usuario será la cadena vacía de forma predeterminada. Al igual que en el caso de las variables regulares en PHP, las variables de clase no necesitan inicializarse, pero es mejor no ser perezosos. Si no inicializa una variable de clase, su valor predeterminado es nulo.

Accediendo a variables de clase

Para obtener acceso a una variable de un objeto, use el operador ->:

$objeto->nombrepropiedad

Probémoslo. Escribamos un script que declare una clase Miembro y una variable de clase, cree un objeto de esta clase y luego establezca el valor de la variable de clase y lo muestre en la pantalla:

nombre de usuario = "Fred"; echo $miembro->nombre de usuario; // Imprimir "Fred" ?>

Ejecute este código, mostrará la cadena "Fred", el valor de la variable de clase $miembro->nombre de usuario. Como puede ver, opera con una variable de objeto como con una variable normal: puede establecerle un valor y leerlo.

Agregar métodos a una clase

¿Qué pasa con la creación de métodos? Como mencioné anteriormente, los métodos son simplemente funciones regulares que forman parte de una clase. Por lo tanto, es posible que no le sorprenda que se creen utilizando la misma palabra clave de función. La única diferencia con la creación de funciones normales es que también puedes agregar uno de los identificadores de acceso (público, privado, protegido) a su declaración. De esta forma, los métodos son similares a las variables de clase:

Clase Nombre de clase ( función pública Nombre de método() ( // (código) ) Función privada Nombre de método() ( // (código) ) Función protegida Nombre de método() ( // (código) ) )

Nota: al igual que en el caso de las variables de clase, los métodos públicos se pueden llamar desde cualquier lugar, los métodos privados solo se pueden llamar dentro de la clase y los métodos protegidos se pueden llamar desde la propia clase y su descendiente.

Intentemos agregar algunos métodos y variables de clase a nuestra clase:

  • Variable de clase privada $loggedIn para identificar al usuario, es decir. si entró o no,
  • método login(), que iniciará sesión en el foro estableciendo la variable de clase $loggedIn en verdadero,
  • método logout(), que cerrará la sesión del foro estableciendo la variable de clase $loggedIn en falso,
  • Método isLoggedIn(), que devolverá el valor de la variable de clase $loggedIn.

Aquí está nuestro código:

iniciado sesión = verdadero;

) función pública cerrar sesión() ( $this->loggedIn = false; ) función pública isLoggedIn() ( return $this->loggedIn; ) ) ?>

Es posible que hayas notado que utilizamos una nueva palabra clave $this. En el contexto de los métodos de un objeto, la variable especial $this se refiere al objeto mismo. Al usar $this en un método de objeto, el método puede acceder a cualquier variable de clase y método del objeto.

Por ejemplo, el método login() puede acceder a la variable de clase $loggedIn del objeto a través de $this->loggedIn. Por cierto, nuestra variable de clase es privada, por lo que no se puede llamar desde ninguna parte del script, sino solo desde los métodos login(), logout() e isLoggedIn(). Este es un buen enfoque porque El objeto (por ejemplo, cómo se registra exactamente si el usuario ha iniciado sesión o no) está separado del resto del código. Siempre que sea posible, intenta utilizar variables de clase privada para que tus objetos sean autónomos, móviles y protegidos.

Nota: la variable de clase $username en nuestro ejemplo es pública. Hice esto sólo para demostrar cómo se puede acceder a las variables de clase de un objeto. EN proyectos reales más bien, debes hacer que esta variable sea privada y crear variables de clase pública especiales para establecer valores de nombre de usuario si es necesario.

Usando métodos

Para llamar a un método en un objeto, utilice el operador ->, con el que ya está familiarizado.

$objeto->nombremétodo()

Esto funciona igual que el desafío. función regular. Puede pasar argumentos entre paréntesis (asumiendo que toma algún argumento, por supuesto), y la llamada al método también puede devolver valores específicos que luego puede usar.

iniciado sesión = verdadero;
) función pública cerrar sesión() ( $this->loggedIn = false; ) función pública isLoggedIn() ( return $this->loggedIn; ) ) $miembro = nuevo miembro(); $miembro->nombre de usuario = "Fred"; echo $miembro->nombre de usuario. "es". ($miembro->
"; $miembro->login(); echo $miembro->nombre de usuario . " es " . ($miembro->isLoggedIn() ? "ha iniciado sesión": "desconectado") . "
"; ?>

"; $miembro->logout(); echo $miembro->nombre de usuario . " es " . ($miembro->isLoggedIn() ? "ha iniciado sesión": "desconectado") . "

Este script mostrará lo siguiente:

Fred está desconectado Fred está conectado Fred está desconectado

  1. Así es como funciona:
  2. Después de describir la clase Miembro, creamos su objeto y lo almacenamos en la variable $miembro. También le dimos a la variable de clase $nombre de usuario de este objeto el valor "Fred".
  3. Luego llamamos al método $member->isLoggedIn() para determinar si el usuario ha iniciado sesión o no. Este método simplemente devuelve el valor de la variable de clase $loggedIn. Dado que el valor predeterminado de esta variable de clase es falso, el resultado de llamar a $member->isLoggedIn() será falso, por lo que se mostrará el mensaje "Fred ha cerrado sesión".
  4. Luego llamamos al método login(). Establecerá la variable de clase $loggedIn en verdadero.
  5. Ahora, al llamar al método $member->isLoggedIn(), devolverá verdadero y mostrará el mensaje "Fred ha iniciado sesión".
  6. Llamemos al método $member->isLoggedIn() por tercera vez. Ahora devolverá falso porque la propiedad $loggedIn se establece nuevamente en falso. Entonces, se mostrará nuevamente el mensaje "Fred ha cerrado sesión".

Nota: en caso de que hayas visto esto primero: ?: es un operador ternario. Esta es una versión simplificada de los bloques if...else. Puedes aprender sobre este tipo de operadores.

Conclusiones

En este tutorial aprendiste los conceptos básicos de la programación orientada a objetos en PHP. Aprendiste sobre cosas como:

  • ¿Qué es la programación orientada a objetos y por qué es útil?
  • conceptos de clases, objetos, variables de clase y métodos
  • cómo crear clases y objetos
  • cómo crear y usar variables de clase
  • conceptos de identificadores de acceso públicos, privados y protegidos
  • cómo crear y usar métodos de clase

Ya ha aprendido mucho al respecto y aprenderá mucho más en las siguientes lecciones. Sin embargo, si ha trabajado con todos los ejemplos que le he dado, tendrá una base sólida. Puede comenzar a crear aplicaciones usando programación orientada a objetos.




Arriba