PHP:如何在类中创建动态变量

PHP:如何在类中创建动态变量,php,class,variables,dynamic,Php,Class,Variables,Dynamic,好吧,我认为这可能是非常基本的,但它仍然让我感到困惑。在开始我的问题之前,让我用这个工作示例演示我的问题所基于的概念: 如上所述,此尝试会导致错误。对我来说,这种尝试似乎合乎逻辑,但我想PHP不这么认为 问题:这可能吗?如果可能,我该如何实现预期结果?另外,如果你能解释为什么我的尝试失败了(逻辑上),那将是一个额外的收获 我已经连续搜索和研究了几个小时,试图找到一个答案或自己解决这个问题,但就我而言,我找不到任何人或任何东西,甚至涉及到这个问题(包括其他堆栈溢出线程)。我甚至找不到任何地方说这是

好吧,我认为这可能是非常基本的,但它仍然让我感到困惑。在开始我的问题之前,让我用这个工作示例演示我的问题所基于的概念:

如上所述,此尝试会导致错误。对我来说,这种尝试似乎合乎逻辑,但我想PHP不这么认为

问题:这可能吗?如果可能,我该如何实现预期结果?另外,如果你能解释为什么我的尝试失败了(逻辑上),那将是一个额外的收获

我已经连续搜索和研究了几个小时,试图找到一个答案或自己解决这个问题,但就我而言,我找不到任何人或任何东西,甚至涉及到这个问题(包括其他堆栈溢出线程)。我甚至找不到任何地方说这是不可能的或类似的事情

我是一个PHP新手,所以我可能需要比其他人更多的解释,但任何形式的帮助或一般指导都将不胜感激。谢谢。

引用

它们是通过使用关键字public、protected或private中的一个来定义的,后跟一个普通变量声明。此声明可能包括一个初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算

(我的重点)

串联不能在编译时计算,只能在运行时计算



如果需要执行此操作,请在构造函数中定义属性的初始值,这将引发语法错误,因为您在一个范围内使用
$this
,而该范围不是:

当从对象上下文中调用任何类方法时,伪变量$this在该类方法中可用$这是对调用对象的引用(通常是该方法所属的对象,但如果该方法是从辅助对象的上下文静态调用的,则可能是另一个对象)

这意味着,即使你想要你也无法做你想做的事情,因为这样的限制。这是许多编程语言中的常见限制,属性必须初始化为静态值。要解决您的问题,您可以执行以下任一操作:

  • 在构造函数中,创建这些变量
  • 自行创建第二个变量,并创建一个连接这两个变量的方法
  • 创造一个神奇的方法为你做到这一点

静态类属性也有同样的限制。

在定义类时不能使用$this,因为它引用实例化后可用的具体对象上下文。你可以使用构造函数来处理这类事情

class ClassName 
    {
        public $a = 'Stack';
        public $b = "";
        function __construct()
        {
          $this->b = $this->a.' Overflow'; 
        }
    }

$instantiate = new ClassName;
echo $instantiate->b; 

谢谢你的建议。我试过了,但不幸的是它对我仍然不起作用。。。我已经用它给我的错误更新了我的帖子。很抱歉输入错误。尝试
$instantiate->b
而不是
$instantiate->$b
<?php

class ClassName {
    public $a = 'Stack';
    public $b = $this->a.' Overflow'; // This gives me: "Parse error: syntax error, unexpected '$this'"
}

$instantiate = new ClassName;
echo $instantiate->$b; // Desired result: "Stack Overflow"

?>
class ClassName 
    {
        public $a = 'Stack';
        public $b = "";
        function __construct()
        {
          $this->b = $this->a.' Overflow'; 
        }
    }

$instantiate = new ClassName;
echo $instantiate->b;