如何在类变量和函数参数中使用变量变量

时间:2015-03-12 22:30:22

标签: php variable-variables

这就是我想要做的事情:

class Contacts {

    private $_plural = 'contacts';
    private $_single = 'contact';
    private $_factory = 'contactfactory';
    private $_model = 'contact_model';

    private $_idname = $_plural . "Id";

    function a($$_idname = 0) {

    }
}

这两行:

private $_idname = $_plural . "Id";

function a ($$_idname = 0) {

没有工作。为什么?我该如何解决这个问题?

修改

关于函数参数:

如果$ _idname =" contactId"我希望参数为$ contactId。这就是为什么我在那里有两个美元符号的原因。这可能不是处理此问题的正确方法,但这是我想要实现的目标。

2 个答案:

答案 0 :(得分:2)

根据PHP's documentation,您必须使用常量值初始化类属性:

  

此声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且不能依赖于运行时信息。为了评估。

对此的修复将使用类构造函数:

function __construct() {
    $this->_idname = $this->_plural . "Id";
}

此外,您不能在函数或方法上使用dynamic variable名称:

  

请注意,变量变量不能与函数或类方法中的PHP的超全局数组一起使用。 变量$ this也是一个无法动态引用的特殊变量。

答案 1 :(得分:1)

你可以改变

private $_idname = $_plural . "Id";

private $_idname;
public function __construct(){
  $this->_idname = $this->_plural.'Id';
}

第一

function a中看不够。可能更像是:

public function a($really = 'What is the point of those underscores?'){
  ${$this->_idname} = $really; // local $contacts var holds $really
}

我真的猜测你想要一个能够自动更改实例化Object属性的方法。你不需要变量变量。如果你想影响你作为参数传递的变量,那么&$yourVar。没有必要将实例化的Object的属性传递给它自己的方法,因为您已经可以使用$this->yourVar在方法中访问它。