我们说我有一个班级
<?php
class MyClass extends OtherClass
{
public function foo()
{
// some stuff
}
public function bar()
{
// some stuff
}
public function baz()
{
// some stuff
}
}
现在我需要添加另一个方法,需要从其他所有方法调用。
private function run_this()
{
$mandatary = true;
return $mandatary;
}
我可以在每个方法中添加一个简单的$this->run_this()
,好的,但是可以添加一些&#34;魔法&#34;收件人从此类的每个方法调用run_this()
?
答案 0 :(得分:2)
我仍然认为你正在做某事,因为你在某个地方有设计问题(XY problem),但是如果你坚持做你所要求的,你可以装饰这个课:
class OtherClass {}
class MyClass extends OtherClass
{
public function foo()
{
// some stuff
}
public function bar()
{
// some stuff
}
public function baz()
{
// some stuff
}
public function run_this()
{
$mandatary = true;
return $mandatary;
}
}
class MyClassDecorator
{
private $myClass;
public function __construct($myClass)
{
$this->myClass = $myClass;
}
public function __call($name, array $arguments)
{
// run the mthod on every call
$this->myClass->run_this();
// run the actual method we called
call_user_func_array ([$this->myClass, $name], $arguments)
}
}
$myClass = new MyClass();
$decorator = new MyClassDecorator($myClass);
// will first run the `run_this` method and afterwards foo
$decorator->foo();
// etc
//$decorator->bar();
这有点难以辨别,上述作品就像你问的那样,但如前所述,这很可能不是你真正想做的事情。
答案 1 :(得分:-1)
你能否使用构造函数?
<?php
class MyClass extends OtherClass
{
function __construct() {
$mandatory = $this->run_this();
}
private function run_this()
{
$mandatary = true;
return $mandatary;
}
public function foo()
{
// some stuff
if ($this->mandatory) {
//true
} else {
//false
}
}
public function bar()
{
// some stuff
}
public function baz()
{
// some stuff
}
}
这是一些变化。
答案 2 :(得分:-2)
不完全确定你想要什么,但如果你想让它可用于所有子对象,我会将它作为受保护的函数放在其他类中。这样只有子对象才能访问它。
class OtherClass {
protected function run_this()
{
$mandatary = true;
return $mandatary;
}
}
class MyClass extends OtherClass
{
public function foo()
{
$mandatory = $this->run_this();
// some stuff
}
public function bar()
{
$mandatory = $this->run_this();
// some stuff
}
public function baz()
{
$mandatory = $this->run_this();
// some stuff
}
}