-2

我意识到这是一个常见问题,我已经尝试自己解决它,但是在按照其他答案的说明进行操作后,我无法让它发挥作用。所以,这就是问题所在——我需要从 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
    }
}

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

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

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

4

2 回答 2

0

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

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

public function methTwo(){

编辑:既然您已经解决了这个问题:是什么让您认为它不起作用?你什么都不做methOne

给出的代码很好,请参阅此Codepad 演示它的工作原理。这意味着还有一些我们看不到的其他代码导致了问题。

于 2012-11-30T12:19:05.447 回答
-1

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

class class_two extends class_one

最重要的是,第一类的方法将被访问到第二类,并且也可以很容易地使用它。试试看

于 2012-11-30T12:28:05.293 回答