从另一个类调用类方法(PHP)

时间:2012-11-30 12:12:21

标签: php oop class methods

我意识到这是一个常见的问题,我已经尝试过自己解决它,但是在按照其他答案的指示后,我无法让它工作。所以,这就是问题 - 我需要从ClassTwo中的类ClassOne调用一个方法。所以我这样做了:

class ClassOne{
    public function methOne($par1,$par2){
        mysql_query("insert into ps_loyalty_events (customer_id,event_id) values ('$par1','$par2') ") or die(mysql_error());
    }
}

class ClassTwo{
    private $customer;    //initialize $customer in the constructor, to be defined as an instance of ClassOne() class and used as $this->customer

    function __construct() {
        $this->customer = new ClassOne();
    }

    public function methTwo(){
        //some stuff here
        $this->customer->methOne(6,10);    //6,10 - randomly chosen parameters, irrelevant
        //some more stuff here, this doesn't get executed at all
    }
}

priblem不在ClassOne或方法methOne()中,因为以下列方式直接从常规PHP文件中调用它们有效:

$customer = new ClassOne();
$customer->methOne(6,10);

但是,当我从ClassTwo方法调用它时,它什么都不做 - 它只是停止执行该函数。使用try-catch似乎没有输出任何东西。我做错了什么?

2 个答案:

答案 0 :(得分:0)

这是因为您的methTwo是静态的。当您调用类的静态方法时,该类不会实例化为对象,因此它没有$this->customer属性。

除非有静态方法的原因,否则您可以更改methoTwo

public function methTwo(){

编辑:既然你已经解决了这个问题:是什么让你觉得它不起作用?您在methOne

中没有做任何事情

给出的代码很好,请参阅此Codepad demo。这意味着我们无法看到其他一些代码导致问题。

答案 1 :(得分:-1)

对于简单的解决方案,尝试在classtwo中使用extend classone,以便默认情况下所有方法都可以在classtwo中使用

class class_two extends class_one

首先,第一类的方法将被访问到第二类,并且也可以轻松使用它。试试吧