这就是我想要做的事情:
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。这就是为什么我在那里有两个美元符号的原因。这可能不是处理此问题的正确方法,但这是我想要实现的目标。
答案 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
在方法中访问它。