在php中调用类中的函数内的函数

时间:2011-09-25 14:46:29

标签: php

我不明白这是怎么回事。我需要从Func2调用Func1,并在对象内部给出Func1的参数。

class MyClass {

        function Func1($a) {
              return $a;
        }
        function Func2() {
              echo $this->Func1($a);
        }
}

$c = new MyClass();

$c->Func1('parametr'); // prints: 1

$c->Func2();

3 个答案:

答案 0 :(得分:2)

如何将参数设置为类变量(属性)?

class MyClass {

        private $a;

        function Func1($a) {
              $this->a = $a;
              return $a;
        }
        function Func2() {
              echo $this->Func1($this->a);
        }
}

这会在您第一次调用Func1时设置参数。然后每次调用Func2时,它都会使用该参数。您也可以跳过这样的参数:

class MyClass {

        private $a;

        function Func1($a = null) {
              if ($a === null) {
                  return $this->a;
              } else {                  
                  $this->a = $a;
                  return $a;
              }
        }

        function Func2() {
              echo $this->Func1();
        }
}

即如果你在没有任何参数的情况下调用func1,它会使用存储的变量(property),否则它会使用给定的参数。这可以根据您的具体需要以各种方式使用。

答案 1 :(得分:0)

指示:

echo $ this-> Func1($ a);

错误:变量$ a超出了Func2的范围。 $ a是Func1的参数,因此它只是Func1的范围。

答案 2 :(得分:0)

您应该阅读有关PHP http://php.net/manual/en/language.variables.scope.php的变量范围的更多信息
快速一瞥:

1)你可以拥有全局变量。要访问这些,请在需要访问该功能的函数中使用关键字global 2)您可以拥有局部变量,仅在函数范围内可用 3)您可以传递对变量的引用,以便一个范围的变量可供其他函数/范围使用 4)你可以拥有不同类型的对象的内部变量(私有,公共,受保护,静态)

我建议你很熟悉这些东西。

至于你的代码,问题很明显。在Func2中,$a是局部变量,因此在传递给$this->Func1($a)时,它是未定义的。正如您的示例代码所示,您可能希望引入类属性private $a,然后使用它。 e.g:

class X {
    private $a;
    function set($val){
        $this->a = $val;
    }
    function get(){
        return $this->a;
    } 
    function doSomethingWithA(){
        $this->set($this->get() * 2);
    }
}