{"id":1750,"date":"2024-08-02T11:47:58","date_gmt":"2024-08-02T09:47:58","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1750"},"modified":"2024-08-02T11:47:58","modified_gmt":"2024-08-02T09:47:58","slug":"04-tipos-de-clases-en-php","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/php\/poo-php\/04-tipos-de-clases-en-php\/","title":{"rendered":"04. Tipos de clases en PHP"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Documentaci\u00f3n oficial<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de comenzar a leer libros de diferentes autores, de las mejores cosas que se pueden hacer es <strong>echar un vistazo y leer la documentaci\u00f3n oficial del lenguaje de programaci\u00f3n<\/strong> que estemos estudiando, ya que va a ser nuestra mejor amiga.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Una de las ventajas de&nbsp;<strong>PHP<\/strong>&nbsp;es que la toda la documentaci\u00f3n la tenemos en idioma espa\u00f1ol, la podemos encontrar en el siguiente enlace:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.php.net\/manual\/es\/intro-whatis.php\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.php.net\/manual\/es\/intro-whatis.php<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Clases en PHP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos el ejm de sintaxis de una clase PHP<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\nclass NombreClase {\n   var $un_atributo;\n   function un_metodo(){\n   }\n}\n?&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Buenas pr\u00e1cticas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las cosas que podemos hacer con&nbsp;<strong>PHP<\/strong>&nbsp;(muy criticado en ocasiones) es que podemos mezclar&nbsp;<strong>HTML<\/strong>&nbsp;con&nbsp;<strong>PHP<\/strong>, lo que se vuelve algo enrevesado. Lo que tendr\u00edamos que hacer es generar p\u00e1ginas con puro c\u00f3digo&nbsp;<strong>PHP<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otra muy buena pr\u00e1ctica, los nombres de clases siempre van a ir en&nbsp;<strong>UpperCamelCase<\/strong>&nbsp;(la primera letra de cada palabra en MAY\u00daSCULAS). Para crear&nbsp;<strong>atributos<\/strong>&nbsp;ponemos la palabra reservada&nbsp;<strong><em>var<\/em>&nbsp;<\/strong>y despu\u00e9s el&nbsp;<strong>signo de d\u00f3lar<\/strong>&nbsp;($) seguido del nombre del atributo. La palabra&nbsp;<strong><em>var<\/em>&nbsp;<\/strong>como tal no va a ser tan necesaria cuando veamos los modificadores de acceso. Los&nbsp;<strong>m\u00e9todos<\/strong>&nbsp;siempre se crean con la palabra reservada&nbsp;<strong><em>function<\/em>&nbsp;<\/strong>seguida del nombre del&nbsp;<strong>m\u00e9todo<\/strong>, los&nbsp;<strong>par\u00e9ntesis<\/strong>&nbsp;y las&nbsp;<strong>llaves<\/strong>, donde escribiremos el c\u00f3digo a ejecutar.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Nota<\/strong>: Como curiosidad,&nbsp;<strong>PHP<\/strong>&nbsp;significa&nbsp;<strong>Personal Home Page<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Instanciar una clase<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para&nbsp;<strong>instanciar<\/strong>&nbsp;una&nbsp;<strong>clase<\/strong>&nbsp;debemos utilizar la siguiente sintaxis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$objeto = new nombreClase();<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De esa manera estamos creando un&nbsp;<strong>objeto<\/strong>&nbsp;dependiente de la clase&nbsp;<em>nombreClase<\/em>&nbsp;que creamos en el ejm de m\u00e1s arriba.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Herencia de clases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los&nbsp;<strong>objetos<\/strong>&nbsp;pueden heredar&nbsp;<strong>propiedades<\/strong>&nbsp;y&nbsp;<strong>m\u00e9todos<\/strong>&nbsp;de otros, mediante la&nbsp;<strong>extensi\u00f3n<\/strong>&nbsp;(<strong>herencia<\/strong>) de&nbsp;<strong>clases<\/strong>, cuya caracter\u00edstica representa la relaci\u00f3n existente entre diferentes&nbsp;<strong>objetos<\/strong>. Para definir una clase como extensi\u00f3n de otra en&nbsp;<strong>PHP<\/strong>&nbsp;se utiliza la palabra reservada&nbsp;<strong><em>extends<\/em><\/strong>. La herencia en&nbsp;<strong>PHP<\/strong>&nbsp;se da de una&nbsp;<strong>clase<\/strong>&nbsp;a otra, es decir, una&nbsp;<strong>clase<\/strong>&nbsp;s\u00f3lo puede heredar las caracter\u00edsticas de otra&nbsp;<strong>clase madre<\/strong>. En&nbsp;<strong>PHP<\/strong>&nbsp;no existe lo que se denomina&nbsp;<strong>herencia m\u00faltiple<\/strong>, es decir, una&nbsp;<strong>clase<\/strong>&nbsp;no puede heredar de 2 o m\u00e1s&nbsp;<strong>clases padre<\/strong>, sin embargo, s\u00ed que ofrece un mecanismo denominado&nbsp;<strong><em>interface<\/em>&nbsp;<\/strong>que hace la funci\u00f3n de&nbsp;<strong>herencia m\u00faltiple<\/strong>&nbsp;como existe en otros lenguajes de programaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\nclass ClasePadre {\n&nbsp; &nbsp; \/\/ CLASE PADRE\n&nbsp; &nbsp; var $atributo;\n&nbsp; &nbsp; function metodo(){\n&nbsp; &nbsp; }\n}\n\nclass ClaseHija extends ClasePadre {\n&nbsp; &nbsp; \/*\n&nbsp; &nbsp; ESTA CLASE HEREDA TODOS LOS M\u00c9TODOS Y PROPIEDADES\n&nbsp; &nbsp; DE LA CLASE PADRE ClasePadre\n&nbsp; &nbsp; *\/\n}\n?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La&nbsp;<strong>clase hija<\/strong>&nbsp;puede acceder a todos los&nbsp;<strong>m\u00e9todos<\/strong>&nbsp;y&nbsp;<strong>propiedades<\/strong>&nbsp;de la&nbsp;<strong>clase padre<\/strong>, dependiendo su modificador de acceso (dependiendo de su privacidad). Por ejm una&nbsp;<strong>clase hija<\/strong>&nbsp;no puede ver un recurso privado de una&nbsp;<strong>clase padre<\/strong>, pero s\u00ed que puede ver un&nbsp;<strong>recurso protegido<\/strong>&nbsp;o un&nbsp;<strong>recurso p\u00fablico<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos de clases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En&nbsp;<strong>PHP<\/strong>&nbsp;podemos encontrar diferentes tipos de clases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clases normales<\/li>\n\n\n\n<li>Clases abstractas<\/li>\n\n\n\n<li>Clase final<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Clases abstractas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las&nbsp;<strong>clases abstractas<\/strong>&nbsp;son aquellas que no necesitan ser instanciadas, es decir, no se necesita crear un&nbsp;<strong>objeto<\/strong>&nbsp;para poder utilizarlas, pero, sin embargo ser\u00e1n heredadas en alg\u00fan momento. Su finalidad es la de declarar&nbsp;<strong>clase gen\u00e9ricas<\/strong>&nbsp;que necesitan ser declaradas, pero a las cuales no se puede otorgar una definici\u00f3n precisa. Es posible tambi\u00e9n declarar&nbsp;<strong>m\u00e9todos abstractos<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es la sintaxis que se debe utilizar para declarar una&nbsp;<strong>clase abstracta<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\nabstract class ClaseAbstracta {\n&nbsp; &nbsp; var $atributo_abstracto;\n  &nbsp; function metodo_abstracto();\n}\n?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando una clase tiene&nbsp;<strong>m\u00e9todos abstractos<\/strong>, dichos m\u00e9todos tienen que ir sin cuerpo, es decir, no tendr\u00e1n el cuerpo que se incluye entre las llaves que es el c\u00f3digo que se ejecutar\u00e1 en el caso de llamar al&nbsp;<strong>m\u00e9todo<\/strong>&nbsp;de la&nbsp;<strong>clase<\/strong>, esta es la diferencia entre una&nbsp;<strong>clase instanciable<\/strong>&nbsp;y una&nbsp;<strong>clase abstracta<\/strong>, las&nbsp;<strong>clases abstractas<\/strong>&nbsp;s\u00f3lo van a tener declarados los nombres de los&nbsp;<strong>m\u00e9todos<\/strong>, la programaci\u00f3n de dichos&nbsp;<strong>m\u00e9todos<\/strong>&nbsp;se desarrollar\u00eda en la clase que herede esta&nbsp;<strong>clase abstracta<\/strong>. Las&nbsp;<strong>clases abstractas<\/strong>&nbsp;nos sirven a manera de modelo de otras&nbsp;<strong>clases<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Nota<\/strong>: No se pueden definir la programaci\u00f3n de los&nbsp;<strong>m\u00e9todos<\/strong>&nbsp;en una&nbsp;<strong>clase abstracta<\/strong>, ser\u00e1 en su&nbsp;<strong>clase hija<\/strong>&nbsp;donde se defina toda su programaci\u00f3n. Tampoco se pueden generar&nbsp;<strong>objetos<\/strong>&nbsp;de esta&nbsp;<strong>clase<\/strong>, es decir, no se pueden&nbsp;<strong>instanciar<\/strong>&nbsp;las&nbsp;<strong>clases abstractas<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Clase final<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las&nbsp;<strong>clases finales<\/strong>&nbsp;no pueden ser heredadas por otras, es por ello que se denominan&nbsp;<strong>clases finales<\/strong>. Se definen anteponiendo la palabra clave&nbsp;<strong><em>final<\/em><\/strong>, de la siguiente manera:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\nfinal class ClaseFinal {\n&nbsp; &nbsp; var $atributo_final;\n&nbsp; &nbsp; function metodo_final();\n}\n?&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Que tipo de clase debo declarar<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Clase que pueda<\/th><th>Instanciable<\/th><th>Abstracta<\/th><th>Heredada<\/th><th>Final<\/th><\/tr><\/thead><tbody><tr><td>Ser instanciada y\/o heredada (las comunes)<\/td><td>S\u00ed<\/td><td>No<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td>Guardar relaci\u00f3n con m\u00e9todo y atributos de otra<\/td><td>No<\/td><td>No<\/td><td>S\u00ed<\/td><td>No<\/td><\/tr><tr><td>Servir de modelo para otras, sin que pueda instanciarse<\/td><td>No<\/td><td>S\u00ed<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td>Instanciarse pero que no pueda ser heredada<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>S\u00ed<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Documentaci\u00f3n oficial Antes de comenzar a leer libros de diferentes autores, de las mejores cosas que se pueden hacer es echar un vistazo y leer la documentaci\u00f3n oficial del lenguaje de programaci\u00f3n que estemos estudiando, ya que va a ser nuestra mejor amiga.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1735,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1750","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Documentaci\u00f3n oficial Antes de comenzar a leer libros de diferentes autores, de las mejores cosas que se pueden hacer es echar un vistazo y leer la documentaci\u00f3n oficial del lenguaje de programaci\u00f3n que estemos estudiando, ya que va a ser nuestra mejor amiga.","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1750","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1750"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1750\/revisions"}],"predecessor-version":[{"id":1752,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1750\/revisions\/1752"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1735"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}