Capítulo 14. Clases y Objetos

Tabla de contenidos
class

class

Una clase es una colección de variables y de funciones que acceden a esas variables . Una clase se define con la siguiente sintaxis :

 
?php

 
class

 
Cart

 
{

 
var

 
$items

 
;

 
/

 
/

 
Items

 
en

 
nuestro

 
carro

 
de

 
la

 
compra

 
/

 
/

 
Añadir

 
$num

 
artículos

 
de

 
tipo

 
$artnr

 
al

 
carro

 
function

 
add_item

 
($artnr

 
,

 
$num

 
)

 
{

 
$this

 
-

 
items[$artnr

 
]

 
+=

 
$num

 
;

 
    }

 
/

 
/

 
Sacar

 
$num

 
artículos

 
del

 
tipo

 
$artnr

 
del

 
carro

 
function

 
remove_item

 
($artnr

 
,

 
$num

 
)

 
{

 
if

 
($this

 
-

 
items[$artnr

 
]

 
$num

 
)

 
{

 
$this

 
-

 
items[$artnr

 
]

 
-=

 
$num

 
;

 
return

 
true

 
;

 
}

 
else

 
{

 
return

 
false

 
;

 
}

 
}

 
}

 
?





El ejemplo define una clase llamada Cart que consiste en un array asociativo de artículos en el carro y dos funciones para meter y sacar ítems del carro

Las clases son tipos , es decir , son plantillas para variables . Tienes que crear una variable del tipo deseado con el operador new .

 
$cart

 
=

 
new

 
Cart

 
;

 
$cart

 
-

 
add_item("10"

 
,

 
1)

 
;



Este ejemplo crea un objeto $cart de clase Cart . La función add_item( ) de ese objeto se llama para añadir un item del artículo número 10 al carro .

Las Clases pueden ser extensiones de otras clases . Las clases extendidas o derivadas tienen todas las variables y funciones de la clase base y lo que les añadas al extender la definición . La herencia múltiple no está soportada .

 
class

 
Named_Cart

 
extends

 
Cart

 
{

 
var

 
$owner

 
;

 
function

 
set_owner

 
($name

 
)

 
{

 
$this

 
-

 
owner

 
=

 
$name

 
;

 
    }

 
}



Ese ejemplo define una clase Named_Cart ( carro con nombre o dueño ) que tiene todas las variables y funciones de Cart , y además añade la variable $owner y una función adicional set_owner( ) . Un carro con nombre se crea de la forma habitual y , una vez hecho , puedes acceder al propietario del carro . En los carros con nombre también puedes acceder a las funciones normales del carro :

 
$ncart

 
=

 
new

 
Named_Cart

 
;

 
/

 
/

 
Creamos

 
un

 
carro

 
con

 
nombre

 
$ncart

 
-

 
set_owner

 
("kris")

 
;

 
/

 
/

 
Nombramos

 
el

 
carro

 
print

 
$ncart

 
-

 
owner

 
;

 
/

 
/

 
Imprimimos

 
el

 
nombre

 
del

 
propietario

 
$ncart

 
-

 
add_item

 
("10"

 
,

 
1)

 
;

 
/

 
/

 
Funcionalidad

 
heredada

 
de

 
Cart



Entre funciones de una clase , la variable $this hace referencia al propio objeto . Tienes que usar $this - loquesea para acceder a una variable o función llamada loquesea del objeto actual .

Los constructores son funciones de una clase que se llaman automáticamente al crear una nueva instancia ( objeto ) de una clase . Una función se convierte en constructor cuando tiene el mismo nombre que la clase .

 
class

 
Auto_Cart

 
extends

 
Cart

 
{

 
function

 
Auto_Cart

 
(

 
)

 
{

 
$this

 
-

 
add_item

 
("10"

 
,

 
1)

 
;

 
    }

 
}



Este ejemplo define una clase Auto_Cart que es un Cart junto con un constructor que inicializa el carro con un item del tipo de artículo " 10 " cada vez que se crea un nuevo Auto_Cart con "new " . Los constructores también pueden recibir parámetros y estos parámetros pueden ser opcionales , lo que los hace más útiles .

 
class

 
Constructor_Cart

 
extends

 
Cart

 
{

 
function

 
Constructor_Cart

 
($item

 
=

 
"10"

 
,

 
$num

 
=

 
1

 
)

 
{

 
$this

 
-

 
add_item

 
($item

 
,

 
$num)

 
;

 
    }

 
}

 
/

 
/

 
Compramos

 
las

 
mismas

 
cosas

 
aburridas

 
de

 
siempre

 
$default_cart

 
=

 
new

 
Constructor_Cart

 
;

 
/

 
/

 
Compramos

 
las

 
cosas

 
interesantes

 
$different_cart

 
=

 
new

 
Constructor_Cart

 
("20"

 
,

 
17)

 
;



Atención

Para las clases derivadas , el constructor de la clase padre no es llamado automáticamente cuando se llama al constructor de la clase derivada .