有没有可能创建一个函数,当每个函数被调用时,它会自动被调用?我希望结果是这样的:
before_functions()
function_1()
before_functions()
function_2()
before_functions()
function_3()
但我想要一个文件的功能:
function before_functions(){} -> call before each function
另一个文件,我调用函数:
function_1()
function_2()
function_3()
但是我不会在每个函数中调用before_functions
。
1条答案
按热度按时间1qczuiv01#
有不同的方法来解决你的问题。其中一些已经在评论中提到。让我们采取最简单的方法来解决您的问题。
神奇的方法__call()
正如lovelace在评论中所说的那样,对于another stack overflow article中所述的问题,已经有了一个简单的解决方案。它使用PHP自己的魔法方法__call()。让我们看一个简单的例子。
正如您所看到的,神奇的方法
__call
为您的目的提供了适当的处理。首先,它检查被调用的方法是否存在,然后在执行被调用的方法之前执行before
方法。before
方法是在你调用一个类方法时自动调用的。回调方法
正如在注解中提到的,回调函数可能是一个不处理类示例的可能解决方案。让我们来看看回调的例子。
这种方法比使用
__call
方法更简单,因为你只需要一个可调用函数作为函数的参数。很简单,嗯?观察者模式是php5中的标准php库附带的,而且更加复杂。我想对你的用例来说太复杂了。为了保持完整性,这里有一个简短的例子,说明观察者模式如何成为您的问题的可用解决方案。
这是我们的基本类
group
,应该遵守。一个应该被观察到的类总是被称为“主体”。一个主体接受一个或多个观察者,这些观察者由主体的notify
方法调用。一个小组由几个人和一个发言人组成。总是有一个说话者,其他人是听众,当说话者说什么的时候,他们可以做出React。对于听众的React,我们需要一个观察者。如果说话者说了什么,这个观察者就会倾听。观察者直接添加到组的构造函数中。这个类实现了
\SplSubject
接口,它为我们带来了处理观察者的方法attach
、detach
和notify
,我们将观察者附加到组。接下来,我们需要一个人和观察者本身的类。一个有名字的简单的人。
这是我们的观察者,它实现了原生的
\SplObserver
接口,这迫使我们使用update方法。每当组中有人发言时,都会调用此方法。有了这些类,我们就有了一个简单的观察者模式。在这个简单的例子中,每当一个群体中的一个人说了什么话,观察者就会迫使他做出React。
你可以移植这个小例子来解决你的问题。观察者可以监听你的函数的执行,每次你的一个函数被调用时,观察者可以在之前执行另一个函数。如本例所示,观察者只不过是在组中的一个人说了一些话之后执行。你的问题也一样。这完全取决于何时调用主题的notify方法。
如果你有任何问题,请尽管问。