¿Es posible definir un valor de propiedad de clase dinámicamente en PHP?

2 minutos de lectura

¿Es posible definir un valor de propiedad de clase dinamicamente
Rakesh

¿Es posible definir una propiedad de clase de PHP y asignar el valor dinámicamente usando una propiedad dentro de la misma clase? Algo como:

class user {
    public $firstname = "jing";
    public $lastname  = "ping";
    public $balance   = 10;
    public $newCredit = 5;
    public $fullname  = $this->firstname.' '.$this->lastname;
    public $totalBal  = $this->balance+$this->newCredit;

    function login() {
        //some method goes here!
    }
}

Rendimientos:

Error de análisis: error de sintaxis, inesperado ‘$this’ (T_VARIABLE) en la línea 6

¿Hay algo mal en el código anterior? Si es así, guíeme y si no es posible, ¿cuál es una buena manera de lograrlo?

1646971447 25 ¿Es posible definir un valor de propiedad de clase dinamicamente
Rizier123

Puedes ponerlo en el constructor de esta manera:

public function __construct() {
    $this->fullname  = $this->firstname.' '.$this->lastname;
    $this->totalBal  = $this->balance+$this->newCredit;
}

¿Por qué no puedes hacerlo como querías? Una cita del manual lo explica:

Esta declaración puede incluir una inicialización, pero esta la inicialización debe ser un valor constante–es decir, debe poder evaluarse en tiempo de compilación y no debe depender de la información en tiempo de ejecución para ser evaluado.

Para obtener más información sobre las propiedades de programación orientada a objetos, consulte el manual: http://php.net/manual/en/language.oop5.properties.php

  • @Yuvi En la inicialización en la definición de clase, debe ser un valor constante que pueda evaluarse en tiempo de compilación; En el constructor u otras funciones puedes asignar lo que quieras

    – Rizier123

    11 de marzo de 2015 a las 13:51


  • ¿Qué pasa si queremos acceder a la propiedad dinámica en una clase secundaria? ¿Como lo llamas? Me enfrento a un desafío en eso.

    – maravilloso

    27 de junio de 2015 a las 0:35

  • @andex Siempre que no sobrescriba la propiedad en su clase secundaria, puede acceder a ella de esta manera: $this->yourProperty

    – Rizier123

    27 de junio de 2015 a las 4:06

No, no puede establecer propiedades como esa.

Sin embargo: puede configurarlos en el constructor, por lo que estarán disponibles si alguien crea una instancia de la clase:

public function __construct()
{
    $this->fullname = $this->firstname . ' ' . $this->lastname;
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad