Foros del Web » Programando para Internet » PHP »

clases

Estas en el tema de clases en el foro de PHP en Foros del Web. Estoy leyendo en el manual el capítulo sobre las clases Viene este ejemplo de código: Una clase es una colección de variables y de funciones ...
  #1 (permalink)  
Antiguo 15/08/2009, 09:47
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
clases

Estoy leyendo en el manual el capítulo sobre las clases

Viene este ejemplo de código:

Una clase es una colección de variables y de funciones que acceden a esas variables:


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;
}
}
}


Lo entiendo todo salvo que es eso de this -> Yo veo que $ item es un array relacional que tendrá un elemento por cada producto existente, y add_item añade al elemento correspondiente del array el número de productos que se quiere añadir al carrito. Pero no entiendo el this ->
  #2 (permalink)  
Antiguo 15/08/2009, 10:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: clases

El $this se trata de una variable built-in (incorporada en todos los objetos), que apunta al objeto actual. O, en otras palabras, $this es una variable de auto-referencia. Puedes usar $this para acceder propiedades y llamar a otros métodos de la clase.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 15/08/2009, 10:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: clases

pues lee algo de OOP
http://php.net/oop
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 16/08/2009, 04:18
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: clases

Veamos si lo he entendido. Yo entiendo que un objeto es una instancia de una determinada clase, por ejemplo, en este caso cada carro de la compra será un objeto, entonces

$this->items[$artnr] += $num;

se refiere al items[$artnr] del carro de la compra que activó el método add_item.

¿No sería suficiente sustituir la instrucción anterior por items[$artnr] += $num; ? Quiero decir, si el método es llamado desde un objeto, ¿no es automático que modifique el items[$artnr] de ese objeto? ¿Es siempre necesario el $this?
  #5 (permalink)  
Antiguo 16/08/2009, 05:24
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: clases

Cita:
Iniciado por PacoRuiz Ver Mensaje
¿No sería suficiente sustituir la instrucción anterior por items[$artnr] += $num; ? Quiero decir, si el método es llamado desde un objeto, ¿no es automático que modifique el items[$artnr] de ese objeto? ¿Es siempre necesario el $this?
Tienes el ambito de la funcion (metodo) y el de la clase... entonces puedes tener una variable interna que se llame $color y un atributo con el "mismo" nombre

Código code:
Ver original
  1. <?
  2. class Test {
  3.   private color;
  4.  
  5.   public function setColor ($color){
  6.     $this->color=$color;
  7.   }
  8. }

'var' no va mas, ahora (desde PHP5) se usa public, private o protected
  #6 (permalink)  
Antiguo 16/08/2009, 13:34
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: clases

No entiendo cómo eso responde a mi pregunta. No veo la relación
  #7 (permalink)  
Antiguo 16/08/2009, 13:51
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: clases

Cita:
No entiendo cómo eso responde a mi pregunta. No veo la relación
Cita:
¿No sería suficiente sustituir la instrucción anterior por items[$artnr] += $num; ?
Pues... si haces eso... estas metiendo elementos en un array que solo existe DENTRO del metodo y no el el ambito de la clase (los atributos son variables globales dentro de la clase)

Para leer o escribir el valor de un atributo de una clase debes usar $this->

Eso intentaba explicarte.
  #8 (permalink)  
Antiguo 17/08/2009, 06:27
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: clases

Ya lo pillo, pero creo que debo leer en general sobre objetos, debo familiarizarme con la idea.

gracias
  #9 (permalink)  
Antiguo 17/08/2009, 08:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: clases

Cita:
Iniciado por PacoRuiz Ver Mensaje
[...] pero creo que debo leer en general sobre objetos [...]


Cita:
Iniciado por pateketrueke Ver Mensaje
pues lee algo de OOP
http://php.net/oop
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:36.