El método constructor nos permitirá inicializar valores por default, así como también pasar datos como parámetro al momento de inicializar un objeto.
Todas las funciones que tienen __ antes del nombre de la función se conocen como métodos mágicos, investiga más y crea un tutorial en la sección de Tutoriales del curso.
Les comparto el tutorial que acabo de crear con mucho cuidado, acepto criticas constructivas ya que es mi primer tutorial. Espero haya sido claro con la realizacion de este documento y espero que les sirva para entender un poco mas.
Estoy siguiendo el curso pero me deja un sinsabor. Por supuesto no quiero decir que la clase no fue explicada correctamente pero por ejemplo acabo de terminar el curso gratuito de programación básica y en cada clase se utilizaron ejemplos nuevos creados desde cero que en mi caso fue muy enriquecedor.
Creo que la forma de aplicar los conceptos al mismo ejemplo cuando en la vida real muy probablemente no lo aplicaríamos de la misma forma es lo que se debería mejorar.
Saludos.
Igual lo tome y es bastante divertido pero creo que el objetivo de este curso es aplicar los conocimientos que se adquieren progresivamente a un contexto mas real.
es ideal que sea desde lo más básico hasta algo más avanzado.. si te empiezan a enseñar persistencia sin saber lo que es OOP u otros conceptos importantes..te será más difícil entender. Luego en la vida real aplicas de cuerdo a tus necesidades :)
Concuerdo con otros compañeros, creo que debería estar mejor explicado para parte de los videos con nuevos ejemplos, así se revuelve uno y me confundo
Les comparto mi primer tutorial, sobre metodos mágicos en PHP
Se entiende y es didáctico! me ha sido muy útil, felicidades!
Gran trabajo.
Los nombres de los métodos __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() y __debugInfo() son mágicos en las clases PHP.
PHP se reserva todos los nombres de los métodos que comienzan con __ como mágicos. Se recomienda que no utilice los nombres de métodos con __ en PHP a menos que desee alguna funcionalidad mágica.
pdt: para un nuevo curso deberian explicar con otros ejemplos, quede un poco confundido
Los nombres de los métodos __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() y __debugInfo() son mágicos en las clases PHP. No se puede tener métodos con estos nombres en ninguna clase a menos que se desee la funcionalidad mágica asociada a estos.
PHP se reserva todos los nombres de los métodos que comienzan con __ como mágicos. Se recomienda que no utilice los nombres de métodos con __ en PHP a menos que desee alguna funcionalidad mágica
Se nota que el profe le gusta explicar programación jajaj
Si es muy feliz explicando y eso transmite muy buena energía.
Clase Persona muestra el uso de algunos métodos mágicos
Previamente se definen los objetos de tipo Persona:
- __get: Accede al valor a una propiedad de un objeto, incluso si es protected o private. No es necesario invocarlo directamente, basta con utilizar la notación objeto->propiedad:
echo 'la identificación de la persona es: '.$persona1->identificacion.'<br>';
en este caso la propiedad identificacion es de tipo private y sin embargo puedo acceder a su valor directamente; pues php invoca automáticamente al método mágico __get
- __set: Asigna un valor a una propiedad de un objeto, incluso si es protected o private. No es necesario invocarlo directamente; pues basta con utilizar la notación objeto->propiedad = valor:
$persona1->direccion='CRA 13A # 77A 63';
en este caso la propiedad identificacion es de tipo private y sin embargo puedo acceder asingar el valor ‘Calle de los artesanos’ directamente; pues php invoca automáticamente al método mágico __get
- __toString: Imprime el contenido de un objeto, se invoca de manera automática con echo + nombre del objeto
//imprimo el contenido de un objetopublicfunction__toString(){ $salida ="<br>";if(isset($this->identificacion)) $salida .='Identificacion: '.$this->identificacion.'<br>';if(isset($this, $this->nombres)) $salida .='Nombres: '.$this->nombres.'<br>';if(isset($this, $this->apellidos)) $salida .='Apellidos: '.$this->apellidos.'<br>';return $salida;}</code>
A continuación el código completo:
<code><?php
classPersona{private $identificacion;private $nombres;private $apellidos;private $contactos =['Telefono1'=>'','Telefono2'=>'','Celular'=>''];publicfunction__construct($identificacion,$nombres,$apellidos){ $this->identificacion=$identificacion; $this->nombres=$nombres; $this->apellidos=$apellidos;}//metodo magico que permite consultar una propiedad existente del objeto, aun siendo privada o protegidapublicfunction__get($propiedad){if(property_exists($this,$propiedad))return $this->$propiedad;elsereturn'la propiedad '.$propiedad.' no existe';}//metodo magico set que permite asignar un valor a una propiedad, incluso si no existepublicfunction__set($propiedad, $valor){if(property_exists($this, $propiedad)) $this->$propiedad = $valor;else $this->propiedad = $valor;}//valido si una propiedad existepublicfunction__isset($property){returnisset($this->$property);}//puedo eliminar una propiedadpublicfunction__unset($property){unset($this->$property);}//imprimo el contenido de un objetopublicfunction__toString(){ $salida ="<br>";if(isset($this->identificacion)) $salida .='Identificacion: '.$this->identificacion.'<br>';if(isset($this, $this->nombres)) $salida .='Nombres: '.$this->nombres.'<br>';if(isset($this, $this->apellidos)) $salida .='Apellidos: '.$this->apellidos.'<br>';return $salida;}}//a partir de este punto se instancia la lcase Persona y se hace uso de los mètodos mágicos _set, _get $persona1 =newPersona('1','CARLOS','AREVALO'); $persona2 =newPersona('2','Sandra Esperanza','Tellez Albarracin'); echo 'Primera impresión de los valores del objeto<br>'; echo 'la identificación de la persona es: '.$persona1->identificacion.'<br>'; echo 'Los nombres de la persona son : '.$persona1->nombres.'<br>'; echo 'Los apellidos de la persona son : '.$persona1->apellidos.'<br>'; echo 'La direccion de la persona es : '.$persona1->direccion.'<br>';//Asigno una propiedad que no existe $persona1->direccion='CRA 13A # 77A 63'; echo '<br> puedo consultar el valor de la direccion: '.$persona1->direccion;//Asigno una propiedad que existe $persona1->apellidos='Ovalle Gamba';//imprimo el contenido del objeto echo "<pre>";print_r($persona1);echo "</pre>";//valido si una propiedad existevar_dump(isset($persona1->identificacion));//elimino una propiedadunset($persona1->identificacion);//imprimo el contenido del objeto echo "<pre>";print_r($persona1);echo "</pre>";//imprime el contenido del objeto utilizando el metodo magico __toString echo '<br>Imprimo el contenido del Objeto $persona1 con __toString<br>'; echo $persona1;//imprime el contenido del objeto utilizando el metodo magico __toString echo '<br>Imprimo el contenido del Objeto $persona2 con __toString<br>'; echo $persona2;?>
Ejecución
Los métodos dentro de una clase nos sirven para encapsular bloques de código que puedan ser de utilidad para cada instancia creada a partir de dicha clase.
Un constructor es un bloque de código similar a un método, con la diferencia de que al momento de crear una instancia de dicha clase, en la misma declaración le damos parámetros iniciales para ejecutar el código del constructor al momento de su creación.
Al tener un constructor en una clase es obligatorio pasarle los parámetros requeridos al crear la instancia de esta, de lo contrario nuestro código dará error.
A diferencia de otros lenguajes de programación, PHP no admite más de un constructor por clase. De igual manera hay formas de hacer que utilicemos más de un constructor según sea el número de parámetros.
Los Métodos mágicos como los constructores en PHP llevan como prefijo en su declaración un doble guión bajo (__) los cuales se ejecutan para diferentes casos especiales en el ciclo de vida de una clase.
alguien sabe donde se encuentra la sección de tutoriales del curso ???
Puedes verlos aquí:
Apuntes:
En PHP, existen métodos mágicos, los cuales se caracterizan por comenzar por 2 guiones bajos. El método mágico __construct(), tiene la característica de inicializarse al instanciar un objeto, de esta manera podríamos ahorrarnos procedimientos.
Constructor y Destructor
Php nos permite hacer uso de dos métodos especiales, los cuales son construct and destruct. Construct será llamado inmediatamente después de que nosotros creamos un nuevo objeto. Destruct, por otro lado, será llamado en el momento en el que ya no exista ninguna referencia a nuestro objeto o en el momento en el que se termine nuestro script.
Estuve estudiando un Tecnico enProgramación de software en Colombia , SENA y Java me daba muuuy duro , termine pero quedaron muchos temas no muy claro y en este curso he consolidado conceptos, entendido definiciones y usos de clases, metodos, constructores, etc
Gracias Hector
Tener acceso directo a las variables de una CLASE, tiene sus riesgos por tema de seguridad.
Se recomienda mantenerlas privadas y NO públicas.
Para eso se usan los GET y SET mencionados.
Pero a modo de aprender y practicar esta bien 😉
Podrías mencionar los riesgos por favor.
Pero en este caso las validaciones pertenecen a la clase no? Digamos que al hacer una prueba no hay una mezcla de clases. Tengo esa duda. Aunque también sé que se debería de validar antes de pasarse al objeto ¿Me explicas? ijiji
Sé que a muchos les será útil esto:
/**
* Job default constructor.
*/publicfunction__construct(){// getting the number of arguments received here $a =func_get_args();// getting the number of arguments to call the correct function// with name name __constructor(number of arguments) $i =func_num_args();// validating if this class has a constructor with the correct nameif(method_exists($this,$f='__construct'.$i)){// calling the correct constructor with the correct number of arguments// passing it one array with this class and the name of the function, and then,// the arguments received herecall_user_func_array(array($this,$f),$a);}}
Se siente muy bien el entender cosas que te parecían del otro mundo ❤️. Gracias Héctor
Hola. No me queda claro en donde se hace el bucle para que lea cada uno de los Jobs. Y tampoco entiendo como es que los lee y los ubica en una posición nueva y no los sobreescribe. Gracias
Hola
Mira la idea es sencilla en el archivo index.php lee tu array jobs y jobs es un conjunto objetos.
No los sobre escribe por que el el va iterando y creando nuevos elementos en el HTML.
Hola, desde Index.php se llama al método que imprime desde Job,phpp
de index.php a job.php
mmhh, esto es dificil sin seguir su plantilla, que me recomiendan?? asi como lleva el curso no me esta ayudando, me esta confundiendo
Si te confundes en la plantilla index.php puedes utilizar sólo el código PHP para visualizar la información de jobs.php