从另一个类PHP7中调用一个类
我有一个抽象类,其中包含所有常用的东西(DB连接等),我可以将横幅放在其中,但我希望它们在自己的类中与DB分离。这就是我的作品从另一个类PHP7中调用一个类,php,oop,php-7,Php,Oop,Php 7,我有一个抽象类,其中包含所有常用的东西(DB连接等),我可以将横幅放在其中,但我希望它们在自己的类中与DB分离。这就是我的作品 include "includes/abstract-class.php"; include "includes/extended-class.php"; include "includes/separate-class.php"; $separate = new SEPARATEClass(); $extended = new EXTENDEDClass($sepa
include "includes/abstract-class.php";
include "includes/extended-class.php";
include "includes/separate-class.php";
$separate = new SEPARATEClass();
$extended = new EXTENDEDClass($separate);
然后,在抽象类中
abstract class ABSTRACTClass
{
public function __construct (SEPARATEClass $separate){
$this->separate = $separate;
}
// This empty function is needed in order for there not to be fatal errors
// even though the function with the same name that actually has content is
// in the separate class...
protected function draw_small_banner(){
}
然后,在我想调用函数的扩展类中,我可以这样做,从SEPARATEClass()
调用draw\u small\u banner()
函数
class EXTENDEDClass extends ABSTRACTClass
{
parent::draw_small_banner();
abstract class ABSTRACTClass {
protected $separate;
public function __construct(SEPARATEClass $separate) {
$this->separate = $separate;
}
}
我尝试了一些不同于其他Stackoverflow问题的方法,但这是唯一能让它起作用的方法。这是使用PHP7。有更好的方法可以工作吗
而且,我觉得奇怪的是,只有当空函数在抽象类中时,这才有效。如果有人能解释这一点或建议一个更整洁的替代方案,我将不胜感激
谢谢。如评论中所述,任何扩展了
ABSTRACTClass
并且没有忽略其构造函数的东西都应该可以访问$this->separate
假设SEPARATEClass
有如下内容
public function draw_small_banner() {
// do some drawing or something
}
我会首先让它成为ABSTRACTClass
的受保护成员
class EXTENDEDClass extends ABSTRACTClass
{
parent::draw_small_banner();
abstract class ABSTRACTClass {
protected $separate;
public function __construct(SEPARATEClass $separate) {
$this->separate = $separate;
}
}
然后,在扩展类中,您应该可以访问它
class EXTENDEDClass extends ABSTRACTClass {
public function drawStuff() {
$this->separate->draw_small_banner();
}
}
执行看起来像
$separate = new SEPARATEClass();
$extended = new EXTENDEDClass($separate);
$extended->drawStuff();
如注释中所述,任何扩展了
ABSTRACTClass
并且没有忽略其构造函数的东西都应该可以访问$this->separate
假设SEPARATEClass
有如下内容
public function draw_small_banner() {
// do some drawing or something
}
我会首先让它成为ABSTRACTClass
的受保护成员
class EXTENDEDClass extends ABSTRACTClass
{
parent::draw_small_banner();
abstract class ABSTRACTClass {
protected $separate;
public function __construct(SEPARATEClass $separate) {
$this->separate = $separate;
}
}
然后,在扩展类中,您应该可以访问它
class EXTENDEDClass extends ABSTRACTClass {
public function drawStuff() {
$this->separate->draw_small_banner();
}
}
执行看起来像
$separate = new SEPARATEClass();
$extended = new EXTENDEDClass($separate);
$extended->drawStuff();
任何扩展了
ABSTRACTClass
并且没有忽略其构造函数的东西都应该可以访问$this->separate
,因为您已经隐式地将其公开了
,谢谢。对,但是$this->separate->draw_small_banner()如果抽象类中没有空函数,code>将无法为我工作。我不知道。SEPARATEClass
是否有一个draw\u small\u banner
public非静态方法?对不起,是的,它是public。就是这样class SeparatedClass{
然后公共函数draw\u small\u banner(){
任何扩展了ABSTRACTClass
并且没有忽略其构造函数的东西都应该有权访问$this->separate
,因为你已经隐式地将它设置为公共的
谢谢。对,但是$this->->separate->->draw\u small\u banner()
如果抽象类中没有空函数,我将无法工作。嗯,我不知道。SEPARATEClass
是否有一个draw_small_banner
公共的非静态方法?对不起,是的,它是公共的。这就是……类SEPARATEClass{
然后公共函数draw_small_banner(){
非常感谢。除了受保护的变量之外,我相信这就是我所拥有的。我的思想可能已经融化了。我明天会再试一次,然后带着反馈回来。如果你绝对希望你的子类实现一个方法,我建议从抽象类中删除该方法,并创建该方法并与该方法交互。然后执行在你的extendedClass中更新你的接口。谢谢。接口是带有空函数的抽象类的样子。我想它需要在当前类中设置,不能只是导入。这很有意义,也意味着我不会发疯。再次感谢。非常感谢。除了受保护的变量,我相信这是正确的我所拥有的。我的想法可能已经融化了。我明天会再试一次,然后带着反馈回来。如果你绝对想让你的子类实现一个方法,我建议从抽象类中删除该方法,并用该方法创建和接口。然后在你的扩展类中实现你的接口。谢谢。接口是带空函数的bstract类看起来像。我想它需要在当前类中设置,不能只是导入。这很有意义,也意味着我不会发疯。再次感谢。