short_open_tag php7 enable php autoload traits

php7 - short_open_tag cpanel



php5.4 rasgos de carga automática (2)

Confirmado también:

PHP 5.4.3-1~dotdeb.0 (cli) (built: May 8 2012 20:49:26) Fatal error: Trait ''x'' not found in /.../index.php on line 12

Se tratan como clases porque se implementan como clases (¿modificadas?).

Por ejemplo, actualmente tienen un comportamiento residual de las clases: pueden poseer propiedades.

En teoría, no deberían y usted no debería confiar en que tengan esta capacidad. En el futuro probablemente será eliminado.

¿Los rasgos en php5.4 están sujetos a carga automática?

Todavía no tengo un entorno para probar, pero no puedo ver ninguna mención al respecto en __autoload en php.net o en la página de rasgos, pero parece que los rasgos se comportan como clases en algunos aspectos.

¿Alguien ha intentado esto todavía?

ACTUALIZAR:

Encontré una solicitud aquí: https://bugs.php.net/bug.php?id=61265 (2012-03-03 13:10 UTC)

Eso parece sugerir que funciona, pero no explícitamente. ¿Alguien puede confirmar que un __autoload () directo será llamado por un rasgo faltante?

ACTUALIZACIÓN: Confirmado - funciona como se esperaba - __autoload obtendrá rasgos, aunque lograr que php5.4 funcione por primera vez parece ser un desafío mayor.

Gracias mystream


Según el manual, la función trait_exists() toma un booleano como segundo parámetro, que está relacionado con la carga automática; lo que parece indicar que los rasgos y la carga automática no son dos ideas incompatibles.

Además, si observa el código fuente de esa función trait_exists() , verá una sección de código, condicionada por ese segundo parámetro, que se parece bastante a lo que puede ver en el código fuente de class_exists() .
Por lo tanto, diría que una segunda vez que los rasgos y la carga automática no son ideas incompatibles ;-)

(No tengo PHP 5.4 instalado en mi computadora actual, así que no puedo probarlo por mi cuenta, pero mirando el código ...)


[edit] OK, acabo de compilar PHP 5.4.3 , la versión estable actual:

$ /usr/local/bin/php --version PHP 5.4.3 (cli) (built: May 17 2012 21:11:42) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

Probemos la siguiente porción corta de código, que se guarda como temp-2.php , y tratamos de usar un rasgo que no está declarado en este archivo:

spl_autoload_register(function ($name) { echo "AUTOLOAD :: "; var_dump($name); }); class MyClass { use MyTrait; // Let''s try to use a trait that is not declared in this file } $obj = new MyClass(); $obj->plop();

Básicamente, si la carga automática funciona para los rasgos, se mostrará "AUTOLOAD" y el nombre de mi rasgo.

Entonces, intentemos ejecutar esa parte del código, y aquí está el resultado que obtengo:

$ /usr/local/bin/php ./temp-2.php AUTOLOAD :: string(7) "MyTrait" Fatal error: Trait ''MyTrait'' not found in /.../temp-2.php on line 13

Entonces, la función de carga automática (aquí, una anónima, pero eso no cambia nada) se llama ...
... lo que significa que los rasgos, con PHP 5.4.3, están sujetos a carga automática .