<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Curso_POO_PHP_Utilizaci%C3%B3n_de_obxectos</id>
	<title>Curso POO PHP Utilización de obxectos - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Curso_POO_PHP_Utilizaci%C3%B3n_de_obxectos"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Utilizaci%C3%B3n_de_obxectos&amp;action=history"/>
	<updated>2026-10-25T18:33:37Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Utilizaci%C3%B3n_de_obxectos&amp;diff=36999&amp;oldid=prev</id>
		<title>Vlourido: /* Utilización de obxectos */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Utilizaci%C3%B3n_de_obxectos&amp;diff=36999&amp;oldid=prev"/>
		<updated>2013-10-22T10:00:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Utilización de obxectos&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Utilización de obxectos ==&lt;br /&gt;
&lt;br /&gt;
Para poder instanciar un obxecto dunha clase, esta debeu declararse previamente. Se temos cada clase no seu propio arquivo, deberemos facer un include ou require por cada clase que imos a empregar no script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
require_once(&amp;quot;Produto.php&amp;quot;);&lt;br /&gt;
require_once(&amp;quot;Vendas.php&amp;quot;);&lt;br /&gt;
require_once(&amp;quot;Clientes.php&amp;quot;);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
En PHP5 é posible definir unha función de nome &amp;#039;&amp;#039;&amp;#039;[http://www.php.net/manual/es/language.oop5.autoload.php __autoload]&amp;#039;&amp;#039;&amp;#039; que faga ese traballo por nos. Cando no script intentemos instanciar un obxecto de unha clase non recoñecida, executarase a función __autoload pasándolle o nome da clase. Na función __autoload teremos poñer o código necesario para incluir a clase.&lt;br /&gt;
&lt;br /&gt;
Por exemplo, o seguinte código inclúe un arquivo co mesmo nome da clase que se está a empregar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function __autoload($nome_clase) {&lt;br /&gt;
    require_once $nome_clase.&amp;quot;.php&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O problema coa función __autoload é que soamente permite definir unha función de busca da clase. Para poder definir máis de unha función de carga automática de clases, podemos empregar no seu lugar a función &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.spl-autoload-register.php spl_autoload_register]&amp;#039;&amp;#039;&amp;#039;. O seu funcionamento é semellante ao de __autoload, pero debemos definir a función de carga con calquera nome, e pasarlle ese nome como parámetro. spl-autoload-register leva un rexistro de todas as funcións de carga automática que se lle pasan e executa as funcións de unha en unha para atopar a clase que se lle indica.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function _blog_autoload($nome_clase) {&lt;br /&gt;
    require_once $nome_clase.&amp;quot;.php&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
spl_autoload_register(&amp;#039;_blog_autoload&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unha vez declarada a clase, xa sexa de xeito automático ou manual, podemos usar a palabra &amp;#039;&amp;#039;&amp;#039;[http://www.php.net/manual/es/language.types.object.php new]&amp;#039;&amp;#039;&amp;#039; para instanciar obxectos da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$p = new Produto();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sobre os obxectos podes utilizar o operador &amp;#039;&amp;#039;&amp;#039;[http://php.net/manual/es/language.operators.type.php instanceof]&amp;#039;&amp;#039;&amp;#039; para comprobar se é ou non unha instancia dunha clase determinada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($p instanceof Produto) {&lt;br /&gt;
…&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para acceder aos atributos e aos métodos públicos do obxecto utilízase o operador frecha &amp;quot;&amp;#039;&amp;#039;&amp;#039;-&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; (fíxate que só se pon o símbolo $ diante do nome do obxecto):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$p-&amp;gt;nome = &amp;#039;Samsung Galaxy S&amp;#039;;&lt;br /&gt;
$p-&amp;gt;get_codigo();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para acceder ás constantes dunha clase, non é necesario que exista ningún obxecto da clase. Débese utilizar o nome da clase e o operador &amp;quot;&amp;#039;&amp;#039;&amp;#039;::&amp;#039;&amp;#039;&amp;#039;&amp;quot;, chamado &amp;#039;&amp;#039;&amp;#039;[http://www.php.net/manual/es/language.oop5.paamayim-nekudotayim.php operador de resolución de ámbito]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo Produto::EURO;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cando dende un obxecto se invoca un método da clase, a este pásaselle sempre unha referencia ao obxecto que fixo a chamada. Esta referencia almacénase na variable &amp;#039;&amp;#039;&amp;#039;$this&amp;#039;&amp;#039;&amp;#039;. Utilízase, por exemplo, para ter acceso aos atributos e métodos privados do obxecto (que só son accesibles dende os métodos da clase).&lt;br /&gt;
&lt;br /&gt;
=== Copia de obxectos e referencias ===&lt;br /&gt;
&lt;br /&gt;
Unha característica da POO que debes ter moi en conta é que sucede cos obxectos cando os pasas a unha función, ou simplemente cando executas un código como o seguinte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$p = new Produto();&lt;br /&gt;
$p-&amp;gt;nome = &amp;#039;Samsung Galaxy S&amp;#039;;&lt;br /&gt;
$a = $p;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En PHP4, a última liña do código anterior crea un novo obxecto cos mesmos valores do orixinal, da mesma forma, que se copia calquera outro tipo de variable. Se despois de facer a copia se modifica, por exemplo, o atributo &amp;#039;nome&amp;#039; dun dos obxectos, o outro obxecto non se vería modificado.&lt;br /&gt;
&lt;br /&gt;
Non obstante, &amp;#039;&amp;#039;&amp;#039;en PHP5 este comportamento varía&amp;#039;&amp;#039;&amp;#039;. O código anterior simplemente crearía un novo identificador do mesmo obxecto, o mesmo que sucede cando creamos unha referencia a unha variable empregando o operador &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;amp;&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Aínda que haxa dous ou máis identificadores do mesmo obxecto, en realidade todos se refiren á única copia que se almacena deste.&lt;br /&gt;
&lt;br /&gt;
Polo tanto, a partir de PHP5 non podes copiar un obxecto utilizando o operador &amp;quot;&amp;#039;&amp;#039;&amp;#039;=&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Se necesitas copiar un obxecto, debes utilizar a palabra &amp;#039;&amp;#039;&amp;#039;[http://www.php.net/manual/es/language.oop5.cloning.php clone]&amp;#039;&amp;#039;&amp;#039;. Ao utilizar clone sobre un obxecto existente, crea unha copia de todos os atributos deste nun novo obxecto.&lt;br /&gt;
&lt;br /&gt;
=== Comparación de obxectos ===&lt;br /&gt;
&lt;br /&gt;
Ás veces tes dous obxectos e queres saber a súa relación exacta. Para [http://www.php.net/manual/es/language.oop5.object-comparison.php comparar dous obxectos], en PHP5 podes utilizar os operadores &amp;quot;&amp;#039;&amp;#039;&amp;#039;==&amp;#039;&amp;#039;&amp;#039;&amp;quot; e &amp;quot;&amp;#039;&amp;#039;&amp;#039;===&amp;#039;&amp;#039;&amp;#039;&amp;quot; (en PHP4 as comparacións de obxectos funcionan de xeito diferente).&lt;br /&gt;
&lt;br /&gt;
Se utilizas o operador de comparación &amp;#039;&amp;#039;&amp;#039;==&amp;#039;&amp;#039;&amp;#039;, comparas os valores dos atributos dos obxectos. Polo tanto dous obxectos serán iguais se son instancias da mesma clase e, ademais, os seus atributos teñen os mesmos valores.&lt;br /&gt;
&lt;br /&gt;
Non obstante, se utilizas o operador &amp;#039;&amp;#039;&amp;#039;===&amp;#039;&amp;#039;&amp;#039;, o resultado da comparación será true só cando as dúas variables sexan referencias ao mesmo obxecto.&lt;br /&gt;
&lt;br /&gt;
=== Funcións de utilidade para clases e obxectos ===&lt;br /&gt;
&lt;br /&gt;
Ademais, en PHP5 inclúense unha serie de [http://es1.php.net/manual/es/ref.classobj.php funcións útiles para o desenvolvemento de aplicacións utilizando POO].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Función !! Significado&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.get-class.php get_class]&amp;#039;&amp;#039;&amp;#039; || Devolve o nome da clase do obxecto&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.class-exists.php class_exists]&amp;#039;&amp;#039;&amp;#039; || Devolve true se a clase está definida ou false no caso contrario&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.get-declared-classes.php get_declared_classes]&amp;#039;&amp;#039;&amp;#039; || Devolve un array cos nomes das clases definidas&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.class-alias.php class_alias]&amp;#039;&amp;#039;&amp;#039; || Crea un alcume para unha clase&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.get-class-methods.php get_class_methods]&amp;#039;&amp;#039;&amp;#039; || Devolve un array cos nomes dos métodos dunha clase que son accesibles dende onde se fai a chamada&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.method-exists.php method_exists]&amp;#039;&amp;#039;&amp;#039; || Devolve true se existe o método no obxecto ou a clase que se indica, ou false no caso contrario, independentemente de se é accesible ou non&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.get-class-vars.php get_class_vars]&amp;#039;&amp;#039;&amp;#039; || Devolve un array cos nomes dos atributos dunha clase que son accesibles dende onde se fai a chamada&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.get-object-vars.php get_object_vars]&amp;#039;&amp;#039;&amp;#039; || Devolve un array cos nomes dos métodos dun obxecto que son accesibles dende onde se fai a chamada&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.property-exists.php property_exists]&amp;#039;&amp;#039;&amp;#039; || Devolve true se existe o atributo no obxecto ou a clase que se indica, ou false no caso contrario, independentemente de se é accesible ou non&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Implicación de tipos ===&lt;br /&gt;
&lt;br /&gt;
A partir da versión 5, PHP incorpora a posibilidade de especificar a clase á que deben pertencer os obxectos que se pasen como parámetros ás funcións. Esta característica chámase &amp;#039;&amp;#039;&amp;#039;[http://www.php.net/manual/es/language.oop5.typehinting.php implicación de tipos]&amp;#039;&amp;#039;&amp;#039;, e tamén pode empregarse con outros tipos como interfaces, arrays (dende PHP 5.1) e tipos &amp;quot;callable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Chega con indicar o tipo antes do parámetro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
public function vendeProduto(Produto $p) {&lt;br /&gt;
	…&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se cando se realiza a chamada, o parámetro non é do tipo axeitado, prodúcese un erro que se poderá capturar.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Vlourido|Víctor Lourido]] 20:14 27 jun 2013 (CEST)&lt;/div&gt;</summary>
		<author><name>Vlourido</name></author>
	</entry>
</feed>