overload obsoletas method funciones destruct and php laravel-4 constructor

obsoletas - php constructor overload



Nombre de clase del constructor PHP7 (2)

Como entiendo esto, en PHP4 mi código estaba defectuoso, pero no en PHP7, ¿verdad?

No exactamente. Los constructores de estilo PHP4 todavía funcionan en PHP7 , simplemente han quedado en desuso y activarán una advertencia en desuso.

Lo que puede hacer es definir un método __construct , incluso uno vacío, para que no se llame al método constructor php4 en una instancia de la clase recién creada.

class foo { public function __construct() { // Constructor''s functionality here, if you have any. } public function foo() { // PHP4-style constructor. // This will NOT be invoked, unless a sub-class that extends `foo` calls it. // In that case, call the new-style constructor to keep compatibility. self::__construct(); } } new foo();

Funcionó con versiones anteriores de PHP simplemente porque los constructores no obtienen valor de retorno. Cada vez que creas una instancia Participante, implícitamente llamas al método participant , eso es todo.

Tengo una aplicación Laravel 4.2 que funciona con PHP5 sin ningún problema. Desde que instalé un nuevo buzón errante que ejecuta PHP7, aparece un error tan pronto como ejecuto un modelo donde el nombre de una función es el mismo que el nombre de la clase (función de relación) como este:

<?php use Illuminate/Database/Eloquent/SoftDeletingTrait; class Participant extends /Eloquent { use SoftDeletingTrait; [...] public function participant() { return $this->morphTo(); } [...] }

Recibo el siguiente mensaje de error:

Los métodos con el mismo nombre que su clase no serán constructores en una versión futura de PHP; El participante tiene un constructor en desuso (Ver: ...)

Entonces, lo que no sabía hasta hoy es que en los métodos PHP4 con el mismo nombre eran el conductor de una clase. Hmm Realmente soy un mal programador ... Pero en este caso, a partir de mi comprensión de lo que está sucediendo en PHP7, corrigen una falla mía, ya que nunca quise usar esta función como un constructor, ya que solo define una relación Eloquent.

Pero, ¿cómo puedo deshacerme de este mensaje? Como entiendo esto, en PHP4 mi código estaba defectuoso, pero no en PHP7, ¿verdad? Si no es necesario, no quiero refactorizar esta función, ya que se utiliza en varios lugares.

¿Alguien puede explicar qué estoy haciendo mal y por qué funcionó con versiones anteriores de PHP?

¡Gracias!


Los constructores de estilo PHP 4 (los métodos que tienen el mismo nombre que la clase en la que están definidos) están en desuso y se eliminarán en el futuro. PHP 7 emitirá E_DEPRECATED si un constructor PHP 4 es el único constructor definido dentro de una clase. Las clases que implementan un método __construct () no se ven afectadas.

<?php class foo { function foo() { echo ''I am the constructor''; } } ?>

Puedes mantener tu antiguo constructor, pero necesitas agregar una nueva construcción como esa:

use Illuminate/Database/Eloquent/SoftDeletingTrait; class Participant extends /Eloquent { use SoftDeletingTrait; [...] public function __construct() { return $this->morphTo(); } public function participant() { return $this->morphTo(); } [...] }