Parámetros de tipo objeto en PHP

Parámeto del tipo objeto

En Rimorsoft hemos ido descubriendo cómo pasar parámetros y asegurarnos de que los tipos sean correctos. Hemos visto un ejemplo muy interesante en post de funciones anónimas, pero no es lo único que podemos hacer.


Aquí veremos cómo pasar a un objeto un parámetro del tipo objeto.

Le he dado muchas vueltas y creo que conseguí la mejor manera de explicarlo. Vamos a crear tres (3) archivos:

  • Index: Archivo principal, y es el que ejecutamos en el navegador.
  • Post: Un objeto que tiene como fin ocuparse de todo lo relacionado con los posts o articulos del sistema.
  • Author: Es el objeto que representa al dueño del post.

La lógica dice que para crear un Post necesitamos si o si a un Author. Comencemos:

Clase Author

<?php

/**
* this class represents a author
*/
class Author 
{
	
    var $name;
    var $lastname;

    function __construct($name, $lastname)
    {
	$this->name = $name;
	$this->lastname = $lastname;
    }

}

Clase Post

<?php

/**
* this class represents a post
*/
class Post 
{
	
    var $author;
    var $title;
    var $body;

    function __construct(Author $author, $title, $body)
    {
	$this->author = $author;
	$this->title  = $title;
	$this->body   = $body;
    }

}

Importante: Nota como el constructor tiene un parámetro del tipo Author, y el resto son solo string (cadena de texto)... Esto nos dice de inmediato que para crear con éxito un Post, necesitamos contar con el Author.

Archivo index.php

<?php

require 'Post.php';
require 'Author.php';

$author = new Author('Italo', 'Morales');
$post   = new Post($author, 'Clases en PHP', 'Las clases nos ayudan...');

echo "Título: {$post->title} <br>";
echo "Contenido: {$post->body} <br>";
echo "Autor: {$post->author->name} <br>";

echo '<pre>'; // structure the output
var_dump($post); // detail of the post object

Resultado

Al ejecutar este código debemos ver lo siguiente:

Título: Clases en PHP
Contenido: Las clases nos ayudan...
Autor: Italo

object(Post)#2 (3) {
  ["author"]=>
  object(Author)#1 (2) {
    ["name"]=>
    string(5) "Italo"
    ["lastname"]=>
    string(7) "Morales"
  }
  ["title"]=>
  string(13) "Clases en PHP"
  ["body"]=>
  string(24) "Las clases nos ayudan..."
}

Lo interesante es la estructura del objeto, dice claramente que Post es un objeto y que dentro tiene otro objeto llamado Author. Luego vemos los string title y body.

Conceptos

  • Etiqueta pre: Con esta etiqueta logramos ver correctamente el objeto, si no usamos esta etiqueta antes del var_dump($post); veremos todo en una sola línea.
  • Función var_dump: Con esto logramos ver la información de una variable, en este caso me interesa saber que hay dentro de la variable $post. Si escribo echo $post; me dará error porque $post no es un string, es un objeto.

Esto es POO, y la idea es seguir profundizando para convertirte en un gran programador y no en un usuario Laravel. Quiero que veas cualquier cosa fabricada en Laravel y digas ¡Genial, es una clase, hereda de, el parámetro es, y así ....... !

Saber realmente PHP te ayudará a comprender cualquier Framework.

El código está en Github de Rimorsoft Regálanos estrellas y está pendiente de los otros post de PHP.

Adquiere en preventa y aprovecha un gran descuento TDD en Laravel

Comparte en

Creado por: Venezuela Italo Morales

Profesor de #Laravel y #PHP en Rimorsoft Online

Más información


Spatie/Laravel Permission ¿Cómo agregar campos en la tabla "roles"?

Hola, mi consulta es la siguiente:

Relacioné la tabla "roles" con mi tabla** "empresa**", es decir, en la tabla "roles", tengo el campo "id_empresa", en la vista, están los campos necesarios y el select de la empresa pero al querer guardar los datos, me arroja el siguiente error: ** "The given role or permission should use guard web instead of Empresas. "** No ...

SOFTWARE PARA CONSULTORIOS MEDICOS

Hola Amigos. soy nuevo en el grupo.. me gustaria saber si alguien tiene o tuvo algun proyecto basado en laravel, para consultorios medicos? ...

sincronización de componentes hermanos

un gran saludo a la comunidad rimorsorf... espero de su valiosa ayuda para mi problema que es el siguiente:

tengo dos componentes en el mismo nivel, el primero crea una tabla con una lista de procesos por tramitar y el segundo componente lista en una tabla los procesos que se han asignado para tramitar; cuando en la primera tabla se asigna el proceso este debe desaparecer de...

plantilla blade y vuejs2

buenas noches comunidad, por casualidad alguien sabrá si se puede integrar la plantilla de laravel blade en vuejs2 component??, gracias dee antemano...