构造函数不应该做任何工作,它们是用来实例化类的。您可以尝试构建只关心做一件事的类(SOC)。我认为您的问题更多的是如何将这些类作为一个组合的工作系统来使用,因为如果操作正确,您不应该遇到您所面临的问题。
对我来说,WordPress类真是一团糟
做很多工作(每个人都在谈论的“上帝”课程)
使用公共属性(始终使用受保护或私有属性,除用于扩展父类的另一个类外,该类之外不应提供属性)
关键是,你不应该将WordPress类视为灵感。
为了快速脱离主题,对于SOC,请查看干涉注入(尤其是塞特注入)@gmazzap在他的回答中巧妙地使用了干涉酶注射here. 网上也有大量关于干扰素注射的信息。您也可以退房my question over at codereview 关于这个问题。
回到您的问题,这是一个如何在类中使用挂钩的示例(,示例中添加了setter和getter用于setter注入)。正如我所说的,构造函数不应该做任何工作,所以将您的操作和过滤器移到构造函数之外
class PropertyValue
{
// Add my protected and/or private properties here
protected $propery;
// Constructor
public function __construct( $property = NULL )
{
$this->property = $property;
}
// For setter interfase injection, define your setters and getters
// Setter method
public function setProperty( $property )
{
$this->property = $property;
return $this;
}
// Getter method
public function getProperty()
{
return $this->property;
}
// This will be the method used to run our hooks
public function init()
{
add_action( \'wp_head\', [$this, \'hookedMethod\'], PHP_INT_MAX );
}
// This is the method we will hook to wp_head or any other hook for that matter
public function hookedMethod()
{
// Use $this->property to do something with.
$value = \'This property value is \' . $this->property;
?><pre><?php var_dump( $value ); ?></pre><?php
}
}
您现在将按如下方式使用该类
$newclass = new PropertyValue;
// Set the value of the property through the setter injection
$newclass->setProperty( \'$100 000\' );
// Call the init() method of our class in order to execute our hook
$newclass->init();
您现在应该看到,此属性值为100000美元,正在转储到标题中
这是非常基本的,应该至少能回答您的问题。正如我所说,看看关于如何使用setter接口注入的链接帖子,也可以利用google获取大量关于这方面的示例和教程。不幸的是,所有内容如何组合在一起在这里都是无关紧要的,因为这将是通用PHP,所以如果您在接口方面有任何问题,您应该寻求stackoverflow的支持,它已准备好处理这些特定问题;-)