¿Hay alguna diferencia entre las siguientes?& new MyClass() vs new MyClass() en PHP
$myVar=&new MyClass();
$myVar=new MyClass();
estoy de codificación en PHP
¿Hay alguna diferencia entre las siguientes?& new MyClass() vs new MyClass() en PHP
$myVar=&new MyClass();
$myVar=new MyClass();
estoy de codificación en PHP
Si se utiliza PHP5, no hay diferencia.
Si utiliza PHP4, el primero pasa una referencia al nuevo objeto.
Esto se debe a que "nuevo" no devuelve una referencia por defecto, sino que devuelve una copia.
¿Cómo usar PHP5? A continuación, debe usar lo siguiente:
$myVar=new MyClass();
Esta es la forma aceptada de inicializar una clase.
Usando la siguiente E_STRICT
cuando está habilitado:
$myVar=&new MyClass();
hará que los tiempos de ejecución de PHP para elevar la alerta Deprecated: Assigning the return value of new by reference is deprecated
.
¿Por qué genera una advertencia? ¿Qué puede ir mal? – Casebash
@Casebash: Es solo una sugerencia de que el comportamiento ha cambiado desde la versión principal anterior y que el comportamiento ahora es implícito, supongo. – alex
@Casebash: es comportamiento obsoleto. No hay ninguna razón en PHP5 por la que pondría '&' delante de una inicialización de instancia. –
&new
ha sido eliminado de PHP7, en su lugar tiene que usar new
.
Asignación de nuevo por referencia
Desde PHP 5.3 asignación de nuevas expresiones por referencias se obsoleto. Se puede reemplazar por una asignación normal 1):
// En lugar de $ obj = & new ClassName;
// Escribe $ obj = new ClassName;
La asignación del valor de retorno por referencia ya no es necesaria desde PHP 5.0.
Comprobar este hilo https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
En PHP4, ¿qué diferencia va a tener una referencia al nuevo objeto de hacer? – Casebash
@Casebash: PHP4 copia instancias de objetos en lugar de pasar referencias de forma predeterminada. '&' es el operador * de referencia *. – alex