Php 类似于_构造,但在类中的每个新调用函数上调用
我有以下3个文件: controller.phpPhp 类似于_构造,但在类中的每个新调用函数上调用,php,function,class,Php,Function,Class,我有以下3个文件: controller.php 类注入{ 公共函数构造(){ 呼应‘我说’; } } model.php 类{ 公共函数init(){ 回声“你好”; $this->otherFunction(); } 公共函数otherFunction(){ //父项::_construct();-->不应手动添加此项 呼应“世界”; } } view.php $output=new say(); $output->init()//更新 如果不修改类“say”(我在上面做过)中的函数,
类注入{
公共函数构造(){
呼应‘我说’;
}
}
model.php
类{
公共函数init(){
回声“你好”;
$this->otherFunction();
}
公共函数otherFunction(){
//父项::_construct();-->不应手动添加此项
呼应“世界”;
}
}
view.php
$output=new say();
$output->init()//更新
如果不修改类“say”(我在上面做过)中的函数,我希望每次调用函数init(),它都会生成“我说你好我说世界”。我怎么做到的
如果你真的需要这个,你应该考虑一下。这可以通过重载和使方法私有/受保护来实现 例如:
<?php
class Foo {
public function __call($function, $arguments)
{
echo 'I chose ';
$this->$function(...$arguments);
}
private function bar(): void
{
echo 'bar' . PHP_EOL;
}
private function baz(): void
{
echo 'baz' . PHP_EOL;
}
}
$foo = new Foo();
$foo->bar();
$foo->baz();
如果希望在不修改类的情况下向类添加新功能,可以使用装饰器模式
<?php
class inject{
public function __construct(){
echo 'I say';
}
}
class say extends inject{
public function init(){
echo ' hello ';
$this->otherFunction();
}
public function otherFunction(){
echo ' world ';
}
}
class DecoratorSay extends say
{
public function otherFunction() {
parent::__construct();
parent::otherFunction();
}
}
$output = new DecoratorSay();
echo $output->init();
@如果我的问题没有关系,将调用或调用静态函数。然而,它有点像函数构造。虽然对每个创建的类调用_构造,但我希望对每个创建的函数调用类似于_构造的东西。那么,您有一个大问题,因为函数不是“创建的”…:D您也不需要“echo$output->init();”,你在这个函数中做回显我的道歉,我的意思是当函数called@Eakethet是的,这只是一个伪代码,所以我不用花很长时间就创建了它。lolHow如果我在bar()内调用baz(),但我希望结果是“我选择bar我选择baz”?那么你应该寻找不同的东西,而不是每次调用函数时都做一些事情。使用另一个函数,该函数将接收要在“I select”之后追加的字符串参数,并调用此函数$this->printOut('baz')等,而不是echo'baz'
I say hello I say world