Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP,一旦设置了某个变量,就执行一个函数_Php_Oop_Function_Methods - Fatal编程技术网

PHP OOP,一旦设置了某个变量,就执行一个函数

PHP OOP,一旦设置了某个变量,就执行一个函数,php,oop,function,methods,Php,Oop,Function,Methods,设置变量值后,如何执行函数 说喜欢 $obj = new object(); // dont perform $obj->my_function() just yet $obj->my_var = 67 // $obj->my_function() now gets run 我想让对象执行这个函数,现在必须由脚本调用 谢谢 编辑 我的变量是在类中预定义的,\uu集合对我不起作用。我建议为$obj创建一个setter函数,并在其中包含相关函数调用。所以基本上你的代码看起来

设置变量值后,如何执行函数

说喜欢

$obj = new object(); // dont perform $obj->my_function() just yet
$obj->my_var = 67    // $obj->my_function() now gets run
我想让对象执行这个函数,现在必须由脚本调用

谢谢

编辑
我的变量是在类中预定义的,\uu集合对我不起作用。

我建议为$obj创建一个setter函数,并在其中包含相关函数调用。所以基本上你的代码看起来是这样的:

$obj = new ClassOfYours();
$obj->setThatValue("apple");
当然,您必须注意,该值的所有赋值都需要 通过该设置器完成,以使其正常工作。假设您在php5上,我会将该属性设置为private,所以所有直接赋值都会导致运行时错误

可以在devarticles.com上找到有关php中OOP的详细概述


HTH

要准确地表达你所描述的内容,你必须使用


假设您希望在设置值后调用my_function(),则可以将这两个操作封装为一个。类似于创建一个新函数集\u my\u var(value)


使用私有属性以便调用
\u set()

class Myclass {
  private $my_var;
  private $my_var_set = false;

  public function __set($var, $value) {
    if ($var == 'my_var' && !$this->my_var_set) {
      // call some function
      $this->my_var_set = true;
    }
    $this->$var = $value;
  }

  public function __get($var, $value) {
    return $this->$name;
  }
}

看<调用code>\uu set()是因为
$my\u var
不可访问,并且有您的钩子。

您的问题不清楚。你想在为变量设置值时调用函数吗?我同意,这是一种更干净的方法。这种方法不是很透明。我建议您使用一个普通的、非魔法的setter函数(就像其他几个建议的那样)。谢谢。二传似乎是最好的方法。是否可以扩展该函数,以便在设置3个变量后运行该函数?var_a、var_b和var_c?一旦所有这些都设置好,运行一个函数?当然,你可以在里面放任何你喜欢的逻辑。谢谢。你能看一下原始问题中的编辑吗。似乎uu set()不起作用,因为变量已经预定义。如果my_var是公共的,或者您正在类中访问它(因此具有私有访问权限),则它将不起作用。我猜这是公开的。你会注意到,在我的示例中,我故意将其设置为私有。
function set_my_var(varvalue)
{
$this->my_var = varvalue;
$this->my_function();
}
class Myclass {
  private $my_var;
  private $my_var_set = false;

  public function __set($var, $value) {
    if ($var == 'my_var' && !$this->my_var_set) {
      // call some function
      $this->my_var_set = true;
    }
    $this->$var = $value;
  }

  public function __get($var, $value) {
    return $this->$name;
  }
}