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

时间:2015-12-13 22:17:49

标签: php class variables dynamic

好吧所以我认为这可能是非常基本的,但它让我感到难过。在我回答我的问题之前,让我演示一下我的问题基于这个工作示例的概念:

<?php

$a = 'Stack';
$b = $a.' Overflow';
echo $b; // Result: "Stack Overflow"

?>

在上面的示例中,$b被定义为$a' Overflow'的组合。 现在,让我们假设我想做与上面相同的事情,除了我不想使用全局变量。我想使用课程。这就是我试图实现这一目标的方式:

<?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"

?>

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

问题:这是否可行,如果可行,我该如何实现预期效果呢?此外,如果你能解释为什么我的尝试失败(逻辑上),那将是一个奖励。

我已经搜索和研究了几个小时,试图找到答案或自己解决这个问题,但对于我的生活,我找不到任何人或任何甚至触及此事的东西(包括其他Stack)溢出线程)。我甚至无法在任何地方发现它不可能或任何类似的东西。

我是一名PHP新手,所以我可能需要比其他人更多的解释,但是我们非常感谢任何形式的帮助或一般指导。谢谢。

3 个答案:

答案 0 :(得分:4)

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

$this

答案 1 :(得分:2)

PHP Docs about defining class properties

引用
  

通过使用public,protected或private之一,然后是普通变量声明来定义它们。此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,必须能够在编译时进行评估,并且不得依赖于运行 - 时间信息,以便进行评估。

(我的重点)

无法在编译时仅在运行时评估连接。

如果需要这样做,请在构造函数

中定义属性的初始值

答案 2 :(得分:0)

这会引发语法错误,因为您在allowed的范围内使用int

  

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

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

  • 在构造函数中,创建这些变量。
  • 自己创建第二个变量,并创建一个连接这两个变量的方法。
  • 创建一个神奇的方法来为你完成。

同样的限制适用于静态类属性。