Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Traduccion POO en PHP5 (version BETA)

Estas en el tema de Traduccion POO en PHP5 (version BETA) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno, me voy a poner a traducir esta seccion del manual oficial de PHP ( http://www.php.net/manual/en/language.oop5.php ); tanto para mi como para a quien le ...

  #1 (permalink)  
Antiguo 27/12/2004, 11:51
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Traduccion POO en PHP5 (version BETA)

Bueno, me voy a poner a traducir esta seccion del manual oficial de PHP (http://www.php.net/manual/en/language.oop5.php); tanto para mi como para a quien le pueda ser util. Desde ya aclaro que mi ingles no es el mejor y que seguramente voy a tener una infinidad de correcciones, cosa que no me molestará para nada; todo lo contrario.
Cualquier persona que asi lo desee, puede ayudarme en mis errores. Cualqueir modederador que quiera directamente modificar estos post para mejorar la traduccion, no me ofnederia en lo mas minimo.


Creditos
Calisco
Cluester
Jpinedo
Vitxo


Ordenados Alfabéticamente
__________________
| Cabeza De Raton |

Última edición por Calisco; 04/01/2005 a las 07:58
  #2 (permalink)  
Antiguo 27/12/2004, 11:56
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Capitulo 19. Clases y Obejtos (PHP 5)


Indice de Contenidos
Introduccion.
Lo Basico.
Carga Automática de Clases.
Constructores y Destructores.
Encapsulamiento.
Operador de Ámbito de Resolución (::).
Palabra Reservada Static.
Constante de Objetos.
Abstraccion de Objetos.
Interfaces de Objetos.
Sobrecarga.
Iteracion de Objetos.
Patrones.
Metodos Magicos.
Palabra Reservada Final.
Excepciones.
Clonando Objetos.
Comparando Objetos.
Reflexion.
Especificación/Declaración de tipos.

Pagina Original: http://www.php.net/manual/en/language.oop5.php
Lo que no puedo traducirlo, le dejo a mi amigo pensando.
__________________
| Cabeza De Raton |

Última edición por Calisco; 20/01/2005 a las 12:42
  #3 (permalink)  
Antiguo 27/12/2004, 12:03
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Introduccion

Introduction

En PHP 5 hay un nuevo modedo de objetos. EL manejo en PHP de objetos ha sido completamente reescrito, permitiendo mas características y un mejor desempeño.
In PHP 5 there is a new Object Model. PHP's handling of objects has been completely rewritten, allowing for better performance and more features.
__________________
| Cabeza De Raton |

Última edición por Calisco; 29/12/2004 a las 17:17
  #4 (permalink)  
Antiguo 27/12/2004, 12:17
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Lo Basico

Lo Basico

Clases
Toda definicion de clase comienza con la palabra class, seguido por el nombre de la clase, el cual puede ser cualquier nombre que no sea una palabra reservada en PHP. Seguido por un par de de llaves, las cuales contienen la definicion de las propiedades y metodos de la clase. Dentro de cada metodo, excepto para metodos estaticos, se dispone de una pseudo variable $this. $this es una referencia a la misma instancia que llama el metodo.
Every class definition begins with the keyword class, followed by a class name, which can be any name that isn't a reserved word in PHP. Followed by a pair of curly braces, of which contains the definition of the classes members and methods. Within each method, except for static methods, a pseudo variable $this is available. $this is a reference to the same instance that called the method.

Ejemplo 19-1. Definicion de una simple clase.

Código PHP:
<?php
class SimpleClase
{
   
// Declaracion de Propiedad $var
   
public $var 'un valor por defecto';

   
// Declaracion del metodo mostrarVar
   
public function mostrarVar() {
       echo 
$this->var;
   }
}
?>
Novedades
Para crear una instancia de un objeto, debe ser creado un objeto nuevo y asignado a este una variable. Un objeto siempre será asignado cuando se este creando un nuevo objeto a menos que el objeto tenga definido un constructor que arroje un error excepcional.
To create an instance of an object, a new object must be created and assigned to a variable. An object will always be assigned when creating a new object unless the object has a constructor defined that throws an exception on error.


Ejemplo 19-2. Creando una instancia.
Código PHP:
<?php
$instancia 
= new SimpleClase()
?>
Cuando estamos asignando una instancia ya creada de un objeto a una nueva variable, la nueva variable accedera a la misma instancia del objeto del cual fue asignada. Este comportamiento es el mismo cuando se pasan instancias a una funcion. Una nueva instancia de un objeto ya creado puede ser construido mediante clonacion.
When assigning an already created instance of an object to a new variable, the new variable will access the same instance as the object that was assigned. This behaviour is the same when passing instances to a function. A new instance of an already created object can be made by cloning it.


Ejemplo 19-3. Asignacion de Objetos

Código PHP:
<?php
$asignado 
=  $instancia;
$referencia  =& $instancia;

$instancia->var '$asignado tendra este valor';

$instancia null// $instancia y $referencia se convierte en null

var_basura($instancia);
var_basura($referencia);
var_basura($asignado);
?>

Este ejemplo mostrará la siguiente salida:

Código PHP:
NULL
NULL
object
(SimpleClase)#1 (1) {
   
["var"]=>
     
string(30"$asignado tendra este valor"


Herencia (Extends)
Una clase puede heredar los metodos y propiedadees de otra clase utilizando la palabra reservada extends en la declaracion de la clase. No ses posible extensiones multiple de clases (herencia multiple), una clase puede ser solo heredada de una clase base.A class can inherit methods and members of another class by using the extends keyword in the declaration. It is not possible to extend multiple classes, a class can only inherit one base class.

Las propiedades y metodos heredados pueden ser sobrecargados, a menos que la clase madre tenga definido un metodo como final, redeclarando con el mismo nombre definido en la clase madre. Es posible acceder a las propiedades o metodos sobrecargados referenciando con parent::
The inherited methods and members can be overloaded, unless the parent class has defined a method as final, by redeclaring them within the same name defined in the parent class. It is possible to access the overloaded method or members by referencing them with parent::

Ejemplo 19-4. Una Simple Clase Heredada
Código PHP:
<?php
class ClaseExtendida extends SimpleClase
{
   
// Se redefine el metodo madre
   
function mostrarVar()
   {
       echo 
"Clase extendida\n";
       
parent::mostrarVar();
   }
}

$extendida = new ClaseExtendida();
$extendida->mostrarVar();
?>

Este ejemplo mostrará la siguiente salida:

Código PHP:
Clase extendida
un valor por defecto 
__________________
| Cabeza De Raton |

Última edición por Calisco; 29/12/2004 a las 08:33
  #5 (permalink)  
Antiguo 27/12/2004, 13:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Calisco ..

Cuando terminen la traducción estaría bueno contactar con el equipo de traducción de PHP para ver si lo aceptan como traducción oficial. Pasate por las listas de correo de PHP.

Un saludo,
  #6 (permalink)  
Antiguo 28/12/2004, 18:51
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Ok, gracias por le dato.
__________________
| Cabeza De Raton |
  #7 (permalink)  
Antiguo 29/12/2004, 05:14
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 8 meses
Puntos: 0
Final Keyword y Static Keyword yo lo traduciría por "La palabra reservada final" y "la palabra reservada static". "Autoloading Objects" por lo que es "Carga automática de objetos", incluso me atrevería a decir "Carga transparente de clases".
"Overloading" por sobrecarga o reescritura de métodos y atributos.
"Visibility" por visibilidad (ésta era chunga eh? :) ), o encapsulamiento de la información o simplemente "modificadores de acceso".
En cuanto al operador "::", en los libros de C++ en castellano se refieren a él como "el operador de ámbito de resolución".
En cuanto a "Type Hinting", quizá convenga traducirlo por algo parecido a "Especificación/Declaración de tipos".

un saludo, ya nos cuentas ;)
  #8 (permalink)  
Antiguo 29/12/2004, 06:26
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
OK, empiezo a hacer las modificaiones pertinentes. Despues ded que se termine la traduccion algun moderador (Cluster ?) podrias borrar todos los post "basuras" o hacer nu nuevo topic.
__________________
| Cabeza De Raton |
  #9 (permalink)  
Antiguo 29/12/2004, 06:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por Calisco
OK, empiezo a hacer las modificaiones pertinentes. Despues ded que se termine la traduccion algun moderador (Cluster ?) podrias borrar todos los post "basuras" o hacer nu nuevo topic.
Si lo desean se pueden borrar los post "basura" .. pero lo ideal es que suban su traducción a alguna web y por aquí dejen el link sólo .. así es facil tal vez contactar con la gente de php.net y enseñarles su trabajo.

Un saludo,
  #10 (permalink)  
Antiguo 29/12/2004, 06:38
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Bueno, por eso no hay problema.
__________________
| Cabeza De Raton |
  #11 (permalink)  
Antiguo 29/12/2004, 08:28
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Carga Automática de Clases.

Carga Automática de Clases.
Muchos desarrolladores de aplicaciones orientadas a objetos crean un archivo fuente en PHP por cada definicion de clase. Uno de los mas grandes disgustos es tener que escribir una larga lista de includes necesarios al comienzo de cada script (uno por cada clase).
Many developers writing object-oriented applications create one PHP source file per-class definition. One of the biggest annoyances is having to write a long list of needed includes at the beginning of each script (one for each class).


En PHP 5 esto ya no es necesario. Tu puedes definir una funcion __autoload la cual es automaticamente llamada en el caso que estes tratando de usar una clase que no ha sido definida aún. Cuando se llama a esta funcion el motor de scripts determina la ultima posibilidad para cargar la clase antes de que PHP falle con un error.
In PHP 5, this is no longer necessary. You may define an __autoload function which is automatically called in case you are trying to use a class which hasn't been defined yet. By calling this function the scripting engine is given a last chance to load the class before PHP fails with an error.
Me parece que esta traduccion deja bastante que desear


Ejemplo 19-5. Ejemplo de Autocarga

Este ejemplo intenta cargar las clases MiClase1 y MiClase2 desde el archivo Miclase1 y MiClase2 respectivamente.

Código PHP:
<?php
function __autoload($nombre_de_clase) {
   require_once 
$nombre_de_clase '.php';
}

$obj  = new MiClase1();
$obj2 = new MiClase2();
?>
__________________
| Cabeza De Raton |

Última edición por Calisco; 29/12/2004 a las 09:26
  #12 (permalink)  
Antiguo 29/12/2004, 09:18
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
A medida que traduzco me voy dando cuenta de las mejoras. Ta buenisimo !!!.
(me voy al centro, salgo de mi trabajo, ya vuelvo ... no me esperen).
__________________
| Cabeza De Raton |
  #13 (permalink)  
Antiguo 29/12/2004, 09:45
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Constructores y Destructores

Constructores y Destructores

Constructor
Código PHP:
void __construct ( [varios args [, ...]]) 
PHP 5 permite a los desarrolladores (programadores) declarar metodos constructores para las clases. Las clases que tienen un método constructor llaman a dicho método cada vez que se crea una instancia de ellas. Por eso, es conveniente para cualquier inicialización que el objeto pueda necesitar antes de ser usado.PHP 5 allows developers to declare constructor methods for classes. Classes which have a constructor method call this method on each newly-created object, so it is suitable for any initialization that the object may need before it is used.


Nota: Los constructores de las superclases no son llamados por defecto si sus subclases definen un constructor. Se require una llamada a parent::__construct() dentro del constructor de la subclase para que ordene la ejecucion del constructor de su clase madre.
Note: Parent constructors are not called implicitly if the child class defines a constructor.
In order to run a parent constructor, a call to parent::__construct() within the child constructor is required.


Ejemplo 19-6. Usando nuevo constructor unificado
Código PHP:
<?php
class ClaseBase {
   function 
__construct() {
       print 
"Constrcutor en la clase Base\n";
   }
}

class 
SubClase extends ClaseBase {
   function 
__construct() {
       
parent::__construct();
       print 
"Constructor en SubClase\n";
   }
}

$obj = new ClaseBase();
$obj = new SubClase();
?>
Por compatibilidad con versiones anteriores, si PHP5 no puede encontrar una funcion __construct() para una clase determinada, buscara un constructor al viejo estilo, mediante un metodo con el mismo nombre de la clase. En efecto, esto quiere decir que el unico caso en el que habría problemas de compatibilidad es si la clase tuvo un metodo llamado __construct () que ha sido usado con un sentido diferente.

For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics.
Aca necesito correccion


Destructor
Código PHP:
void __destruct void 
PHP 5 introduce el conpecto destructor similar al de otros lenguajes orientados a objetos, como C++. El metodo destructor sera llamado tan pronto como todas las referencias a un objeto en particular sean removidas o cuando el objeto es explicitamente destruido.
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed.

Ejemplo 19-7. Ejemplo de Destructor
Código PHP:
<?php
class MiClaseDestruible {
   function 
__construct() {
       print 
"En el constructor\n";
       
$this->name "MiClaseDestruible";
   }

   function 
__destruct() {
       print 
"Destruyendo ... " $this->name "\n";
   }
}

$obj = new MiClaseDestruible();
?>
Asi como los constructores, los destructores de las superclases no seran llamados implicitamente por el motor interprete. Para ordenar la ejecucion del destructor de una superclase, uno tendria que tener en forma explicita la llamada parent::__destruct () en el destructor de la subclase.
Like constructors, parent destructors will not be called implicitly by the engine. In order to run a parent destructor, one would have to explicitly call parent::__destruct() in the destructor body.
__________________
| Cabeza De Raton |

Última edición por Calisco; 04/01/2005 a las 07:57 Razón: Criticas de Jpinedo
  #14 (permalink)  
Antiguo 29/12/2004, 10:18
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Encapsulamiento

Encapsulamiento (Visibility).
EL encapsulamiento de una propiedad o de un metodo puede ser definido por un prefijo en la declaracion con las palabras reservadas: public (publico), protected (protegido) o privated (privado).La propiedad o el metodo declarado como Publico puede ser accedido desde cualquier lugar. Protegido limita el acceso a clases heredadas (y no las clases que definen estos items). Privada limita el acceso solo a las clases que definen estas propiedades y/o metodos.
The visibility of a property or method can be defined by prefixing the declaration with the keywords: public, protected or private. Public declared items can be accessed everywhere. Protected limits access to inherited classes (and to the class that defines the item). Private limits visibility only to the class that defines the item.

Acceso a las Propiedades
Las propiedades de las clases deben ser definidas como public, private o protected.
Class members must be defined with public, private, or protected.

Ejemplo 19-8. Declaracion de Propiedades

Código PHP:
<?php
/**
 * Definicion MiClase
 */
class MiClase
{
   public 
$publica 'Publica';
   protected 
$protegida 'Protegida';
   private 
$privada 'Privada';

   function 
Imprimir()
   {
       echo 
$this->publica;
       echo 
$this->protegida;
       echo 
$this->privada;
   }
}

$obj = new MiClase();
echo 
$obj->publica// Ejecuta
echo $obj->protegida// Fatal Error
echo $obj->privada// Fatal Error
$obj->Imprimir(); // Muestra Publica, Protegida y Privada


/**
 * Define MiClase2
 */
class MiClase2 extends MiClase
{
   
// Podemos redeclarar las propiedades Publica y Protegida, pero no Privada

   
protected $protegida 'Protegida2';

   function 
Imprimir()
   {
       echo 
$this->publica;
       echo 
$this->protejida;
       echo 
$this->privada;
   }
}

$obj2 = new MiClase2();
echo 
$obj->publica// Ejecuta
echo $obj2->privada// Indefinida
echo $obj2->protegida// Fatal Error
$obj2->Imprimir(); // Muestra Publica, Protegida2, y no muestrs Privata

?>
Nota: En PHP 4 el metodo de declaracion de una variable con la palabra reservada var ya no es valido en Objetos con PHP 5. Para compatibilizar, una variable declarada en PHP sera asumida como de acceso publico, y un warning E_STRICT sera emitido.
Note: The PHP 4 method of declaring a variable with the var keyword is no longer valid for PHP 5 objects. For compatibility a variable declared in php will be assumed with public visibility, and a E_STRICT warning will be issued.


Acceso a los Metodos
Los metodos de las clases deben ser definidos como public, private, o protected. Los metodos sin alguna de estas palabras reservadas seran automaticamente definidos como public.
Class methods must be defined with public, private, or protected. Methods without any declaration are defined as public.


Ejemplo 19-9. Declaracion de Metodos

Código PHP:
<?php
/**
 * Define MiClase
 */
class MiClase
{
   
// Los constructores deben ser publicos
   
public function __construct() { }

   
// Declarando un metodo Publico
   
public function MiPublico() { }

   
// Declarando un metodo Protegido
   
protected function MiProtegido() { }

   
// Declarando un metodo Privado
   
private function MiPrivado() { }

   
// Esto es Publico
   
function Foo()
   {
       
$this->MiPublico();
       
$this->MiProtegido();
       
$this->MiPrivado();
   }
}

$miclase = new MiClase;
$miclase->MiPublico(); // Trabaja ...
$miclase->MiProtegido(); // Fatal Error
$miclase->MiPrivado(); // Fatal Error
$miclase->Foo(); // Trabajan Public, Protected y Private


/**
 * Define MiClase2
 */
class MiClase2 extends MiClase
{
   
// Esta es Publico
   
function Foo2()
   {
       
$this->MiPublico();
       
$this->MiProtegido();
       
$this->MiPrivado(); // Fatal Error
   
}
}

$miclase2 = new MiClase2;
$miclase2->MiPublico(); // Trabaja ...
$miclase2->Foo2(); // Trabaja Public y Protected , Private no
?>
__________________
| Cabeza De Raton |

Última edición por Calisco; 29/12/2004 a las 11:03
  #15 (permalink)  
Antiguo 29/12/2004, 11:05
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Operador de Ámbito de Resolución (::).

Operador de Ámbito de Resolución (::).
El Operador de Ambito de resolucion (tambien llamado Paamayim Nekudotayim) o en terminos simples, el doble 'dos puntos', es un simbolo que permite el acceso a propiedades o metodos estatic, protected y sobreescritos de una clase.
The Scope Resolution Operator (also called Paamayim Nekudotayim) or in simpler terms, the double colon, is a token that allows access to static, constant, and overridden members or methods of a class.

Cuando se referencia a estos items desde fuera de la definicion de la clase, se usa el nombre de la clase.
When referencing these items from outside the class definition, use the name of the class.


Paamayim Nekudotayim, al principio, pareceria ser una eleccion extraña para nombrar el doble-dospuntos, Sin embargo, mientras se estaba escribiendo el Zend Engine 0.5 (al cual mueve PHP 3), es que el equipo SEND decide llamarlo asi. Actualmente significa doble-dospuntos - en Hebreo !!
Paamayim Nekudotayim would, at first, seem like a strange choice for naming a double-colon. However, while writing the Zend Engine 0.5 (which powers PHP 3), that's what the Zend team decided to call it. It actually does mean double-colon - in Hebrew!

Ejemplo 19-10. :: desde fuera de la definicion de la clase
Código PHP:
<?php
class MiClase {
   const 
VALOR_CONSTANTE 'Un Valor constante';
}

echo 
MiClase::VALOR_CONSTANTE;
?>
Dos palabras reservadas self y parent son usadas para acceder a las propiedades y metodos desde dentro de la definicion de la clase.
Two special keywords self and parent are used to access members or methods from inside the class definition.


Ejemplo 19-11. :: desde dentro de la definicion de la clase

Código PHP:
<?php
class OtraClase extends MiClase
{
   public static 
$mi_estatica 'variable estatica';

   public static function 
dobleDosPuntos() {
       echo 
parent::VALOR_CONSTANTE "\n";
       echo 
self::$mi_estatica "\n";
   }
}

OtraClase::dobleDosPuntos();
?>
Cuando se sobreescribe o anula en una clase heredada la definicion de un metodo de la superclase, PHP no llamara al metodo madre. Se reemplaza por el metodo de la clase heredada o el metodo de la superclase no es llamado. Esto tambien se aplica a Constructores y Destructores, Sobrecarga y Definiciones de Metodos Magicos.
When an extending class overrides the parents definition of a method, PHP will not call the parent's method. It's up to the extended class on whether or not the parent's method is called. This also applies to Constructors and Destructors, Overloading, and Magic method definitions.
Help Again !!!

Ejemplo 19-12. Llamando metodos de la superclase
Código PHP:
<?php
class MiClase
{
   protected function 
miFuncion() {
       echo 
"MiClase::miFuncion()\n";
   }
}

class 
OtraClase extends MiClase
{
   
// se Anula la definicion de la superclase

   
public function miFuncion()
   {
       
// Pero todavia se llama a la funcion madre
       
parent::miFuncion();
       echo 
"OtraClase::miFuncion()\n";
   }
}

$clase = new OtraClase();
$clase->myFuncion();
?>
__________________
| Cabeza De Raton |

Última edición por Calisco; 29/12/2004 a las 11:44 Razón: mantenimiento
  #16 (permalink)  
Antiguo 29/12/2004, 11:59
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Palabra reservada Static

Palabra reservada Static

Declarando las propiedades o metodos de una clase como estaticos, se logra llamarlos desde fuera del conexto del objeto. Una Propiedad o Metodo con static no puede ser accedido con una variable que sea una instancia del objeto y no puede ser redefinido en una subclase.
Declaring class members or methods as static, makes them callable from outside the object context. A member or method declared with static can not be accessed with a variable that is an instance of the object and cannot be re-defined in an extending class.


La declaracion static debe ser despues de la declaracion de encapsulamiento. Para lograr compatibilidad con PHP 4, si no se usa una declaracion de encapsulamiento, entonces la propiedad o el metodo sera tratado como si fuese declarado como un static publico.
The static declaration must be after the visibility declaration. For compatibility with PHP 4, if no visibility declaration is used, then the member or method will be treated as if it was declared as public static.


Porque los metodos estaticos son llamados sin una instancia del objeto creado, la pseudo variable $this no es permitida dentro de metodo declarado como static.
Because static methods are callable without an instance of the object created, the pseudo variable $this is not available inside the method declared as static.


En realidad las llamadas de un metodo estatico son resueltas en timepo de compilacion. Cuendo se esta usando un nombre explicito de clase el metodo ya esta identificado completamente y no se aplican las reglas de herencia. Si la llamada se hace por si mismo entonces el mismo se traslada a la clase actual, que es la clase a la cual pertenece el codigo. Aqui tambien no se aplican las reglas de herencia.In fact static method calls are resolved at compile time. When using an explicit class name the method is already identified completley and no inheritance rules apply. If the call is done by self then self is translated to the current class, that is the class the code belongs to. Here also no inheritance rules apply.


Las Propiedades estaticas no pueden ser accedidas a travez del objeto usando el operador fecha ->.Static properties cannot be accessed through the object using the arrow operator ->.


Ejemplo 19-13. Ejemplo de Propiedad Estatica

Código PHP:
<?php
class Foo
{
   public static 
$mi_estatica 'foo';

   public function 
staticValor() {
       return 
self::$mi_estatica;
   }
}

class 
Bar extends Foo
{
   public function 
fooStatic() {
       return 
parent::$mi_estatica;
   }
}


print 
Foo::$mi_estatica "\n";

$foo = new Foo();
print 
$foo->staticValor() . "\n";
print 
$foo->mi_estatica "\n";      // Undefined "Property" mi_estatica

// $foo::mi_estatica no es posible

print Bar::$mi_estatica "\n";
$bar = new Bar();
print 
$bar->fooStatic() . "\n";
?>

Ejemplo 19-14. Ejemplo de Metodo Estatico


Código PHP:
<?php
class Foo {
   public static function 
aStaticMetodo() {
       
// ...
   
}
}

Foo::aStaticMetodo();
?>
__________________
| Cabeza De Raton |

Última edición por Calisco; 29/12/2004 a las 13:34
  #17 (permalink)  
Antiguo 29/12/2004, 12:43
 
Fecha de Ingreso: junio-2003
Mensajes: 105
Antigüedad: 20 años, 11 meses
Puntos: 0
Cita:
Iniciado por Calisco
[SIZE=1]Bueno, me voy a poner a traducir esta seccion del manual oficial de PHP
Excelente Idea!!!
  #18 (permalink)  
Antiguo 29/12/2004, 13:18
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Constante de Objeto

Constante de Objeto

Es posible definir valores constantes en una base para clases manteniendo los valores de las mismas invariables. Las Constantes difieren de las variables normales en que no se puede usar el simbolo $ para declararlas o usarlas. Asi como las propiedades estaticas, los valores constantes no pueden ser accedidos desde una instancia de un objeto.
It is possible to define constant values on a per-class basis remaining the same and unchangeable. Constants differ from normal variables in that you don't use the $ symbol to declare or use them. Like static members, constant values can not be accessed from an instance of the object.


Ejemplo 19-15. Definiendo y Usando una Constante

Código PHP:
<?php
class MiClase
{
   const 
constante 'valor constante';

   function 
muestraConstante() {
       echo  
self::constante "\n";
   }
}

echo 
MiClase::constante "\n";

$clase = new MiClase();
$clase->muestraConstante();
// echo $clase::constante;  no esta permitido
?>
__________________
| Cabeza De Raton |

Última edición por Calisco; 11/01/2005 a las 07:47 Razón: mantenimiento
  #19 (permalink)  
Antiguo 29/12/2004, 13:40
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Abstraccion de Objeto.

Abstraccion de Objeto.

PHP 5 introduce Clases y Metodos Abstractos. No esta permitido crear una instancia de una clase que ha sido definida como abstracta. Cualquier clase que contiene al menos un metodo abstracto debe tambien ser abstracta. Los metodos definidos como abstractos simplemente declaran la firma del metodo que no puden definir la implementacion.
PHP 5 introduces abstract classes and methods. It is not allowed to create an instance of a class that has been defined as abstract. Any class that contains at least one abstract method must also be abstract.
Methods defined as abstract simply declare the method's signature they cannot define the implementation.


La clase que implementa el metodo abstracto debe ser definida con el mismo encapsulamiento o con uno menor. Si el metodo abstracto se define como protected, la implementacion de la funcion debe ser definida o como protected o como public.
The class that implements the abstract method must define with the same visibillity or weaker. If the abstract method is defined as protected, the function implementation must be defined as either protected or public.


Ejemplo 19-16. Ejemplo de Clase Abstracta
Código PHP:
<?php
abstract class claseAbstracta
{
   
// Se Fuerza una Clase abstracta para definir este metodo
   
abstract protected function tomarValor();

   
// Metodo Comun
   
public function imprimirSalida() {
       print 
$this->tomarValor();
   }
}

class 
ClaseConcreta1 extends ClaseAbstracta
{
   protected function 
tomarValor() {
       return 
"ClaseConcreta1";
   }
}

class 
ClaseConcreta2 extends ClaseAbstracta
{
   protected function 
tomarValor() {
       return 
"ClaseConcreta2";
   }

}

$clase1 = new ClaseConcreta1;
$clase1->imprimirSalida();

$clase2 = new ClaseConcreta2;
$clase2->imprimirSalida();
?>
Codigos antiguos que no tienen clases definidas por el usuario o funciones llamadas abstract deberian poder ejecutarse sin modificaciones.
Old code that has no user-defined classes or functions named 'abstract' should run without modifications.
__________________
| Cabeza De Raton |

Última edición por Calisco; 12/01/2005 a las 08:59
  #20 (permalink)  
Antiguo 02/01/2005, 00:21
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola Calisco...
Saludo tu iniciativa de la traducción. Voy a tratar de ayudar en lo que pueda.
Por lo pronto, te acabo de enviar un MP con algunas correciones del apartado de constructores.
Cita:
Iniciado por Cluster
Cuando terminen la traducción estaría bueno contactar con el equipo de traducción de PHP para ver si lo aceptan como traducción oficial. Pasate por las listas de correo de PHP.
De acuerdo. También sería bueno averiguar si no existe ya la traducción oficial (o si no está ya oficialmente en proceso)... porque sería trabajar en vano.

Saludo

Última edición por jpinedo; 02/01/2005 a las 00:28
  #21 (permalink)  
Antiguo 03/01/2005, 05:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
De acuerdo. También sería bueno averiguar si no existe ya la traducción oficial (o si no está ya oficialmente en proceso)... porque sería trabajar en vano.
Por aquí creo que está el CVS para colaborar o lo que hay hecho hasta el momento sobre traducciones (en este caso al castellano):

http://chora.php.net/phpdoc-es/
(parece que ya hay algo hecho sobre OOP)

Un saludo,
  #22 (permalink)  
Antiguo 03/01/2005, 17:57
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por Cluster
Por aquí creo que está el CVS para colaborar o lo que hay hecho hasta el momento sobre traducciones (en este caso al castellano):

http://chora.php.net/phpdoc-es/
(parece que ya hay algo hecho sobre OOP)
Ok.. gracias Cluster por el enlace...
Lo que se ve que hay sobre OOP es el archivo "oop" en las referencias del lenguaje (desde el enlace de Cluster, carpeta "language/"). Ese archivo es la traducción de orientación a objetos para PHP4, que también figura en el manual.
http://www.php.net/manual/es/language.oop.php

Lo que falta es la traducción de Orientación a objetos en PHP5. Esa debería ser una carpeta llamada "oop5" (también dentro de "language/") que no está. O sea que no hay, como se puede ver en el manual.
http://www.php.net/manual/es/language.oop5.php

Saludos

Última edición por jpinedo; 03/01/2005 a las 17:59
  #23 (permalink)  
Antiguo 04/01/2005, 07:50
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Bueno ..., el tema es que ya empezamos con esta traduccion, y ya que estamos la terminamos. Es como que ya estamos subidos en este barco ...
Por otro lado, vulvo a mi actividad el lunes de la semana que viene. Voy a corregir algunas cositas que me dijo J.
Saludos y Feliz año Nuevo.
__________________
| Cabeza De Raton |
  #24 (permalink)  
Antiguo 05/01/2005, 18:10
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Para Calisco y cualquier ota persona que quiera colaborar con la traducción OFICIAL del manual de PHP:
Esta es la web del proyecto de traducción:
http://phpdoc.linux-es.org/

Saludos
  #25 (permalink)  
Antiguo 10/01/2005, 12:49
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Gracias ... vuelvo al ruedo. Veo si hoy puedo hacer alguna cosita. EL tema es que este año año empieza bastante complicado para mi, pero aun asi me estoy dedicando cuanto puedo a este fantastico nuevo/viejo mundo de la programacion.
__________________
| Cabeza De Raton |

Última edición por Calisco; 10/01/2005 a las 13:20
  #26 (permalink)  
Antiguo 10/01/2005, 17:02
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Interfaces de objetos

Interfaces de objetos

Las interfaces de objetos permiten que usted cree código especificando qué métodos debe implementar una clase, sin tener que definir cómo son manejados estos métodos.
Object interfaces allow you to create code which specifies which methods a class must implement, without having to define how these methods are handled.

Las interfaces se definen usando la palabra reservada interface, de la misma manera que una clase estándar, pero sin que ninguno de sus métodos tenga definido su contenido. Las clases que implementan una interfaz deben hacerlo utilizando la palabra reservada implements y debe definir todos los métodos listados en la interfaz. Si se desea, una clase puede implementar más de una interfaz listando las interfaces que implementa separadas por una coma.
Interfaces are defined using the interface keyword, in the same way as a standard class, but without any of the methods having their contents defined. Classes which implement an interface should do so using the implements keyword, and must have definitions for all the methods listed in the interface. Classes may implement more than one interface if desired by listing each interface split by a comma.

Todos los métodos declarados en una interfaz deben ser públicos. Ésta es la naturaleza de las interfaces.
All methods declared in an interface must be public, this is the nature of an interface.

Si se declara que una clase implementa una interfaz, pero no implementa todos sus métodos, se producirá un error fatal que informa qué métodos no han sido implementados.
Stating that a class implements an interface, and then not implementing all the methods in the interface will result in a fatal error telling you which methods have not been implemented.

Ejemplo 19-17. Ejemplo de interfaces.
Código PHP:
<?php
// Declaramos la Interfaz iTemplate
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Implementamos la interfaz
// Esto funcionará
class Template implements iTemplate
{
    private 
$vars = array();
    
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
    
    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }
        
        return 
$template;
    }
}

// Esto no funcionará
// Fatal error: La Clase BadTemplate contiene 1 método abstracto
// y debe ser también declarada como abstracta (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();
    
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}

?>
  #27 (permalink)  
Antiguo 11/01/2005, 07:32
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Buenisimo, ya empiezo a hacer el link al menu principal.
__________________
| Cabeza De Raton |
  #28 (permalink)  
Antiguo 12/01/2005, 09:08
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Sobrecarga

Sobrecarga
Tanto las llamados a un metodo como el acceso a las propiedades pueden ser sobrecargadas por los metodos __call, __get y __set. Estos metodos solo seran disparados cuando el objeto u objeto heredado no contenga la propiedad o el metodo al cual se esta intentando acceder.
Both method calls and member accesses can be overloaded via the __call, __get and __set methods. These methods will only be triggered when your object or inherited object doesn't contain the member or method you're trying to access.

Sobrecargando Propiedades
Código PHP:
void __set (string nombremixed valor)
mixed __get (mixed nombre
Las porpiedades de la clase pueden ser sobrecargadas al ejecutar el codigo especifico definido en su clase mediante la definicion de metodos especialmente nombrados. El parametro $nombre es usado con el nombre de la variable que deberia ser seteada o devuelta. EL parametro $valor del metodo __set() especifica el valor que el objeto deberia setear en ...
Class members can be overloaded to run custom code defined in your class by defining these specially named methods. The $name parameter used is the name of the variable that should be set or retrieved. The __set() method's $value parameter specifies the value that the object should set set the $name.



Ejemplo 19-18. Ejemplo de Sobrecarga con __get y __set

Código PHP:
<?php
class Setter
{
   public 
$n;
   private 
$x = array("a" => 1"b" => 2"c" => 3);

   function 
__get($nm)
   {
       print 
"Tomando [$nm]\n";

       if (isset(
$this->x[$nm])) {
           
$r $this->x[$nm];
           print 
"Devolviendo: $r\n";
           return 
$r;
       } else {
           echo 
"Nada!\n";
       }
   }

   function 
__set($nm$val)
   {
       print 
"Seteando [$nm] to $val\n";

       if (isset(
$this->x[$nm])) {
           
$this->x[$nm] = $val;
           echo 
"OK!\n";
       } else {
           echo 
"No OK!\n";
       }
   }
}

$foo = new Setter();
$foo->1;
$foo->100;
$foo->a++;
$foo->z++;
var_dump($foo);
?>
El resultado sera:
Cita:
Setting [a] to 100
OK!
Tomando[a]
Devolviendo: 100
Seteando [a] to 101
OK!
Tomando [z]
Nada!
Seteando [z] to 1
No OK!
object(Setter)#1 (2) {
["n"]=>
int(1)
["x:private"]=>
array(3) {
["a"]=>
int(101)
["b"]=>
int(2)
["c"]=>
int(3)
}
}
Sobrecargando Metodos
Código PHP:
mixed __call (string nombre, array argumentos
Los Metodos pueden ser sobrecargados al ejecutar el codigo especifico definido en la clase mediante la definicion de metodos especialmente nombrados. El parametro $nombre es usado con el mismo nombre de la funcion que fue solicitada para ser usada. Los argumentos que fueron pasados en la funcion seran definidos como un array en el parametro $argumentos. El valor devuelto desde el metodo __call() sera devuelto en la llamada del metodo solicitado.
Class methods can be overloaded to run custom code defined in your class by defining this specially named method. The $name parameter used is the name as the function name that was requested to be used. The arguments that were passed in the function will be defined as an array in the $arguments parameter. The value returned from the __call() method will be returned to the caller of the method.


Ejemplo 19-19. Ejemplo de Sobrecarga con __call
Código PHP:
<?php
class Caller
{
   private 
$x = array(123);

   function 
__call($m$a)
   {
       print 
"Metodo llamado $m:\n";
       
var_dump($a);
       return 
$this->x;
   }
}

$foo = new Caller();
$a $foo->test(1"2"3.4true);
var_dump($a);
?>

El resultado sera:
Cita:
Metodo llamado test:
array(4) {
[0]=> int(1)
[1]=> string(1) "2"
[2]=> float(3.4)
[3]=> bool(true)
}
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
__________________
| Cabeza De Raton |

Última edición por Calisco; 12/01/2005 a las 10:25
  #29 (permalink)  
Antiguo 12/01/2005, 10:31
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
Iteracion de Objetos

Iteracion de Objetos

PHP 5 provee una manera para objetos para ser definidos de manera que es posible iterar a traves de una lista de items con, por ejemplo, una declaracion foreach. Por defecto, las propiedades visibles seran usadas por esta iteracion.PHP 5 provides a way for objects to be defined so it is possible to iterate through a list of items, with, for example a foreach statement. By default, all visible properties will be used for the iteration.Lo acomode como pude. Aca necesito una mano.

Ejemplo 19-20. Simple Iteracion de Object


Código PHP:
<?php
class MiClase
{
   public 
$var1 'valor 1';
   public 
$var2 'valor 2';
   public 
$var3 'valor 3';

   protected 
$protegida 'variable protegida';
   private  
$privada  'variable privada';

   function 
iteracionVisible() {
       echo 
"MiClase::iteracionVisible:\n";
       foreach(
$this as $key => $value) {
           print 
"$key => $value\n";
       }
   }
}

$clase = new MiClase();

foreach(
$clase as $key => $value) {
   print 
"$key => $value\n";
}
echo 
"\n";


$clase->iteracionVisible();

?>
El ejemplo anterior tendra la siguiente salida:
Cita:
var1 => valor 1
var2 => valor 2
var3 => valor 3

MiClase::iteracionVisible:
var1 => valor 1
var2 => valor 2
var3 => valor 3
protected => variable protegida
private => variable privada
Como muestra la salida de este script, a travez del foreach se han interado todas las variables visibles que pueden ser accedidas. Para realizar un paso mas avanzado, se puede implementar una funcion internar de PHP denominada interface de Iterador. Esta funcion permite al objeto decidir que y como el objeto sera iterado.
As the output shows, the foreach iterated through all visible variables that can be accessed. To take it a step further you can implement one of PHP 5's internal interface named Iterator. This allows the object to decide what and how the object will be iterated.


Ejemplo 19-21. Iteracion de Objeto implementando Iterador
Código PHP:
<?php

class MiIterador implements Iterator
{
   private 
$var = array();

   public function 
__construct($array)
   {
       if (
is_array($array)) {
           
$this->var $array;
       }
   }

   public function 
rewind() {
       echo 
"rewinding\n";
       
reset($this->var);
   }

   public function 
current() {
       
$var current($this->var);
       echo 
"current: $var\n";
       return 
$var;
   }

   public function 
key() {
       
$var key($this->var);
       echo 
"key: $var\n";
       return 
$var;
   }

   public function 
next() {
       
$var next($this->var);
       echo 
"next: $var\n";
       return 
$var;
   }

   public function 
valid() {
       
$var $this->current() !== false;
       echo 
"valid: {$var}\n";
       return 
$var;
   }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
   print 
"$a: $b\n";
}
?>
La salida será:
Cita:
rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:
Tambien se puede definir la clase ...
You can also define your class so that it doesn't have to define all the Iterator functions by simply implementing the PHP 5 IteratorAggregate interface.
__________________
| Cabeza De Raton |

Última edición por Calisco; 14/01/2005 a las 12:12
  #30 (permalink)  
Antiguo 14/01/2005, 07:17
 
Fecha de Ingreso: noviembre-2003
Mensajes: 114
Antigüedad: 20 años, 6 meses
Puntos: 0
Todo va muy bien, pero lo mejor sería organizar toda esta información en archivos HTMLs (mejor si es el mismo formato de los manuales oficiales de PHP) de manera que se puedan transportar con más facilidad, ya sea a alguna web u otros sitios o en este mismo foro luego de terminado el trabajo.
__________________
Soporte y Creaciones PHP-Nuke:
NukeProjects.Net

if($Necesitas=="Ayuda"){
echo "No dudes en pedirla";
}
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

SíEste tema le ha gustado a 4 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 23:01.