是否可以在 PHP 中动态定义类属性值?

Posted

技术标签:

【中文标题】是否可以在 PHP 中动态定义类属性值?【英文标题】:Is it possible to define a class property value dynamically in PHP? 【发布时间】:2015-05-13 08:08:54 【问题描述】:

是否可以定义 php 类属性并使用同一类中的属性动态分配值?类似的东西:

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!
    

产量:

解析错误:语法错误,第 6 行出现意外的 '$this' (T_VARIABLE)

上面的代码有什么问题吗?如果是这样,请指导我,如果不可能,那么有什么好方法可以做到这一点?

【问题讨论】:

【参考方案1】:

你可以像这样把它放到构造函数中:

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

为什么你不能按照你想要的方式做呢?手册中的引用解释了它:

这个声明可能包含一个初始化,但是这个初始化必须是一个常数值——也就是说,它必须能够在编译时被评估并且不能依赖于运行——时间信息以便进行评估。

有关 OOP 属性的更多信息,请参阅手册:http://php.net/manual/en/language.oop5.properties.php

【讨论】:

@Yuvi 在类定义的初始化中,它必须是一个可以在编译时评估的常量值;在构造函数或其他函数中,您可以分配您想要的内容 如果我们想访问子类中的动态属性怎么办?你怎么称呼它?我在这方面面临挑战。 @andex 只要您不覆盖子类中的属性,您就可以像这样访问它:$this->yourProperty【参考方案2】:

不,你不能这样设置属性。

但是:您可以在构造函数中设置它们,因此如果有人创建了该类的实例,它们将可用:

public function __construct()

    $this->fullname = $this->firstname . ' ' . $this->lastname;

【讨论】:

以上是关于是否可以在 PHP 中动态定义类属性值?的主要内容,如果未能解决你的问题,请参考以下文章

springboot自定义配置文件数量是变化的,属性相同,只是值不一样,怎样绑定到实体类?

PHP判断{函数/类/方法/属性}是否存在

如何在 TypeScript 中为类属性动态分配值

php中的动态类属性$$value

您可以在 PHP 中动态创建实例属性吗?

缓存反射结果(类属性)