我正在尝试创建一个方法,该方法允许我使用setVal()函数设置类中的属性,如果用户试图从类外部设置值而不使用'forceSet'函数然后它会抛出一个异常。在php中覆盖__set魔术功能
问题是,即使$ forceSet为true,它也会抛出一个异常。如果我在类中手动设置属性以便私人访问,那么一切正常,但这不是一个选项,因为我希望能够动态地在这个类中设置各种属性。
class test
{
private $_allowedCols = array('title', 'name', 'surname');
public function __set($n,$v)
{
$this->setVal($n, $v);
}
public function setVal($name, $value, $forceSet=false)
{
if (!$forceSet && !in_array($this->_allowedCols, $name))
{
throw new Exception('cant set value');
}
$this->$name = $value;
}
}
$b = new test;
$b->setVal('blah', 'test', true);
print_r($b);
exit;
我想要做的就是将$ _POST的所有值设置为对象中的属性。我想检查$ _allowedCols以确保只有我想要的值被放入对象中,但有时我可能想要强制值来自不在$ _allowedCols中的代码。
任何想法?
$this->$name = $value;
然后在__set
,它$this->setVal($n, $v)
,它使用默认:
这条线SETVAL'$此 - > $名称= $价值;'会触发'__set'方法以防万一使用'$ forceSet = false'触发setVal' – 2012-04-04 18:53:09
用bool保护属性无论如何都是无保护的。你应该找到一个更好的实现你想达到的目标。想象一下,在“用户”知道他需要将第三个参数设置为“true”之前需要多长时间:) – 2012-04-04 18:54:34
虽然我不愿意投票,但是显着改变你的问题令人不悦,并且使得回答相当混乱,因为大部分他们现在处理完全不同的事情。 – Cerad 2012-04-04 21:01:06