PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Reporte de Errores> <Bases de Datos
Last updated: Fri, 22 Aug 2008

view this page in

Nuevo Modelo de Objetos

En PHP 5 existe un nuevo Modelo de Objetos. El manejo de objetos en PHP ha sido re-escrito por completo, permitiendo una mejora en rendimiento y muchas características nuevas. En versiones previas de PHP, los objetos eran manejados como tipos primitivos (por ejemplo enteros y cadenas). La desventaja de este método era que semánticamente el objeto completo era copiado cuando una variable era asignada, o pasada como parámetro a un método. En el nuevo enfoque, los objetos son referenciados por gestor, y no por valor (puede pensarse en el gestor como un identificador de objeto).

Muchos programadores de PHP no son conscientes siquiera de los detalles que implican las copias en el modelo antiguo de objetos y, por lo tanto, la mayoría de aplicaciones de PHP funcionarán sin problemas, o con muy pocas modificaciones.

El nuevo Modelo de Objetos es documentado en la Referencia del Lenguaje.

En PHP 5, una función con el nombre de una clase es llamada como constructor únicamente si se define en la misma clase. En PHP 4, es llamada también si está definida en la clase padre.

Vea también la directiva zend.ze1_compatibility_mode para compatibiladad con PHP 4.



Reporte de Errores> <Bases de Datos
Last updated: Fri, 22 Aug 2008
 
add a note add a note User Contributed Notes
Nuevo Modelo de Objetos
zzo38
07-Oct-2007 09:06
You should be able to clone a object in compatibility of PHP4,PHP5 with:
<?php
 $x
=unserialize(serialize($y));
?>
bdas at premiergroup dot uk dot com
25-May-2007 08:49
Since PHP5 upgraded PHP to an OOP language, they CHANGED the metaphor so that when you copy an object, you just get a pointer to it (as in C# and Java) and so therefore they needed to make a way to CLONE objects as well in case you need a REAL copy of the object.

Most cases, clone is not needed, simply because a real copy of an object is usually not mandatory.  In special cases, object cloning can be used to save time in porting.
quinn at strangecode dot com
19-May-2006 09:53
Here is another possible solution for migrating code to php 5 when using $this = 'something' reassignments. In my case, I had several classes  with methods that were self-instantiating with static calls. I was able to simply use a different variable: I changed $this to $_this and it worked the same because I copied an instance of the original object by reference using an instantiation factory method:

class DB {
    function &getInstance()
    {
        static $instance = null;

        if ($instance === null) {
            $instance = new DB();
        }

        return $instance;
    }
    ...

In every method needing access to this object I assigned it to a temporary variable by reference:
   
    function doSomething ()
    {
        $_this =& DB::getInstance();

        $_this->doSomethingElse();
        $_this->param['id'] = 123;
    }

Which allows method calls or saving data back to the original object.

I originally created classes like this so I didn't need to keep track of instantiations or global objects. I could just call DB::doSomething() and the object is created dynamically or referenced from an already existing object.

Reporte de Errores> <Bases de Datos
Last updated: Fri, 22 Aug 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites