2011-09-25 73 views
0

我不明白这是怎么回事。我需要从Func2调用Func1,而Func1的参数应该在对象内部提供。在php中的函数内调用函数php

class MyClass { 

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

$c = new MyClass(); 

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

$c->Func2(); 
+2

你在你的问题中声称什么,以及当你执行你的代码时会发生什么不匹配:http://codepad.org/quUn635i。请澄清你的问题和代码。 – Gordon

+1

我认为这需要更多的上下文。 Func2假设要实现什么?看起来Func2是想创建一个传递给Func1的对象,但我们无法确定这个例子。 –

回答

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不带任何参数,它使用存储的变量(属性),否则,使用给定的参数。这可以根据您的确切需求以各种方式使用。

0

说明:

echo $ this-> Func1($ a);

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

0

你应该在PHP http://php.net/manual/en/language.variables.scope.php
阅读更多有关变量的作用域快速一瞥:

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

我建议你熟悉这个东西真的很好。

至于你的代码,问题是显而易见的。 Func2$a是局部变量,因此当传递到$this->Func1($a)时,它是未定义的。如您的示例代码所示,您可能需要引入类属性private $a,然后使用它。例如:

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