繁体   English   中英

从其他类(PHP)调用类方法

[英]Calling class method from other class (PHP)

我意识到这是一个常见问题,我已经尝试自己解决它,但是在按照其他答案的说明进行操作后,我无法使其正常工作。 所以,这就是问题所在——我需要从 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 似乎没有输出任何内容。 我究竟做错了什么?

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

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

public function methTwo(){

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

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

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

class class_two extends class_one

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM