example - PHP: ''usar'' dentro de la definición de clase
php const array (1)
Recientemente me encontré con una clase que usa la declaración de
use
dentro de la definición de clase.
¿Podría alguien explicar qué hace exactamente, ya que no puedo encontrar ninguna información al respecto?
Entiendo que podría ser una forma de alejarlo de un alcance global del archivo dado, pero ¿tal vez también permita que la clase dada herede de varias clases principales, ya que las
extends
solo permiten una referencia de clase principal?
El ejemplo que vi fue en el modelo de usuario de la instalación original de Laravel:
<?php
use Illuminate/Auth/UserTrait;
use Illuminate/Auth/UserInterface;
use Illuminate/Auth/Reminders/RemindableTrait;
use Illuminate/Auth/Reminders/RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = ''users'';
/**
* The attributes excluded from the model''s JSON form.
*
* @var array
*/
protected $hidden = array(''password'', ''remember_token'');
}
y he visto algunos ejemplos de este modelo que en realidad usa métodos incluidos dentro de la clase
UserTrait
, de ahí mi sospecha, pero realmente me gustaría saber más sobre el significado de las declaraciones de
use
adjuntas.
La documentación de PHP dice:
La palabra clave use debe declararse en el alcance más externo de un archivo (el alcance global) o dentro de las declaraciones de espacio de nombres. Esto se debe a que la importación se realiza en tiempo de compilación y no en tiempo de ejecución, por lo que no se puede bloquear el alcance. El siguiente ejemplo mostrará un uso ilegal de la palabra clave use:
seguido por el ejemplo:
namespace Languages;
class Greenlandic
{
use Languages/Danish;
...
}
lo que indicaría que es un uso incorrecto de la palabra clave
use
: ¿alguna pista?
Se llaman rasgos y están disponibles desde PHP 5.4 . Se importan a otra clase o espacio de nombres utilizando la palabra clave use que se incluye desde PHP 5.0, como importar una clase regular a otra clase. Son de herencia única. La razón principal para la implementación de los rasgos se debe a la limitación de la herencia única.
Para obtener más detalles, consulte el php.net/manual/en/language.oop5.traits.php :