一旦变量的值已经设置,我该如何执行一个函数?PHP OOP,一旦设置了某个变量就执行一个函数
说喜欢
$obj = new object(); // dont perform $obj->my_function() just yet
$obj->my_var = 67 // $obj->my_function() now gets run
我希望对象做这个功能,现在不得不通过脚本调用。
感谢
编辑 my_var在类中预定义,__set是不是为我工作。
一旦变量的值已经设置,我该如何执行一个函数?PHP OOP,一旦设置了某个变量就执行一个函数
说喜欢
$obj = new object(); // dont perform $obj->my_function() just yet
$obj->my_var = 67 // $obj->my_function() now gets run
我希望对象做这个功能,现在不得不通过脚本调用。
感谢
编辑 my_var在类中预定义,__set是不是为我工作。
使用私有财产等等__set()
被调用:
见Overloading。因为$my_var
无法访问并且存在钩子,所以调用了__set()
。
我建议为$ obj创建一个setter函数,并在那里包含相关的函数调用。所以基本上你的代码将在某种程度上是这样的:
$obj = new ClassOfYours();
$obj->setThatValue("apple");
当然,你必须要小心,以ThatValue所有任务必须通过 为了使二传手完成,使其正常工作。假设你在php5上,我将该属性设置为private,所以所有直接分配都会导致运行时错误。
在devarticles.com上可以找到this article的关于OOP的一个很好的概述。
HTH
我同意,这是一个更干净的方式来做到这一点。 – gnud 2009-10-14 08:36:05
要acheive正是你的描述,你必须使用一个magic setter。
class ObjectWithSetter {
var $data = array();
public function my_function() {
echo "FOO";
}
public function __set($name, $value) {
$this->data[$name] = $value;
if($name == 'my_var') {
$this->my_function();
}
}
public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
/** As of PHP 5.1.0 */
public function __isset($name) {
return isset($this->data[$name]);
}
public function __unset($name) {
unset($this->data[$name]);
}
}
这种方法不是很透明。 我建议你使用一个普通的非魔术设置函数(就像其他几个建议的一样)。 – gnud 2009-10-14 08:37:48
假设您希望在设置值时调用my_function(),那么您可以将这两种操作封装到一个中。像你这样的东西创建一个新的功能set_my_var(值)
function set_my_var(varvalue)
{
$this->my_var = varvalue;
$this->my_function();
}
你的问题不清楚。你想为一个变量设置一个值时调用一个函数吗? – 2009-10-14 08:32:22