如何在PHP中将另一个类方法调用到另一个类方法中

时间:2013-11-21 06:04:44

标签: php oop call func

我正在尝试在PHP中使用call_user_func来获取该方法,但事实是我无法以正确的方式获取它。我的数据存储在另一个类方法中,我想将该数据提取到另一个类方法中。首先,我创建了一个带有一些param的对象,这些对象在其他类中给出。基于参数,类开始工作而不是将数据存储到方法中。我的问题是我已经在课后调用了一个对象,现在如何将该对象再次调用到另一个类中。也许您可以通过示例代码了解它:

class A{
    public $a;
    public $b;
    public function __construct(){

    }
    public function x(){
        $this->a = "something";
        $this->b = "something1";
    }
    public function abc(){
        $printthis = call_user_func(array($obj2,$method_name);
        echo $printthis;
    }
}
$obj1 = new A;
$obj1->x;

class B{
    public $a;
    public $b;
    public function __construct($c,$d){
        $this->a = $c;
        $this->b = $d;
    }
    public function abc(){
        //some code here that returns something
    }
    public function abd(){
        //some code here that returns something
    }
}
$obj2 = new B($obj1->a, $obj1->b);

在上面的代码部分中,我不知道如何将B类中的数据转换为A类。任何人都可以帮助我这个主题吗?我从这里得到的一切都没有。代码示例可以解释一切。

3 个答案:

答案 0 :(得分:1)

基本继承将解决您的所有问题。

class A{
    public $a;
    public $b;
    public function __construct(){

    }
    public function x(){
      $this->a = "something";
      $this->b = "something1";
   }
   public function abc(){
    $printthis = call_user_func(array($obj2,$method_name);
    echo $printthis;
   }

   // to call abd() method from class B inside this class
   function call_child_method(){
    if(method_exists($this, 'abd')){
        $this->abd();
    }
}
}
$obj1 = new A;
$obj1->x();

class B extends A{  // object will can call both methods of class A and B
   public $a;
   public $b;
   public function __construct($c,$d){
      $this->a = $c;
      $this->b = $d;
   }
   public function abc(){
      //some code here that returns something
   }
   public function abd(){
     //some code here that returns something
   }

   // to call X() method from class A inside this class
   parent::X(); 
 }
 $obj2 = new B($obj1->a, $obj1->b);

答案 1 :(得分:0)

你不会得到任何东西,因为你没有归还任何东西。在审核完代码后,您已经犯了一些错误。

public function abc(){
    $printthis = call_user_func(array($obj2,$method_name);
    echo $printthis;
}

您的A类不会获得$obj2$method_name,因为您没有初始化它。

  

我不知道如何将B类中的数据转换为A类

以不同的方式获得它,您可以将B继承到A,或者您可以使用getter setter来传递您想要传递的数据。这取决于你的需求。

答案 2 :(得分:0)

对于这个解决方案非常简单,你的问题是函数x没有被正确调用, 为此案例更改代码:$this->x; $this->x();

class A{
    public $a;
    public $b;
    public function __construct(){

    }
    public function x(){
        $this->a = "something";
        $this->b = "something1";
    }
    public function abc(){
        $printthis = call_user_func(array($obj2,$method_name);
        echo $printthis;
    }
}
$obj1 = new A;
$obj1->x(); //call function x correctly

class B{
    public $a;
    public $b;
    public function __construct($c,$d){
        $this->a = $c;
        $this->b = $d;
    }
    public function abc(){
        //some code here that returns something
    }
    public function abd(){
        //some code here that returns something
    }
}
$obj2 = new B($obj1->a, $obj1->b);