【发布时间】:2012-11-17 19:10:07
【问题描述】:
我是一个新手开发人员,试图扩展我的工具箱并学习更多技巧。我最近在 Python 中遇到了一种称为“装饰”的模式,我想知道是否/如何在 PHP 中实现它,因为我有一个现有的 PHP 代码库。
这是我的意思的一个简短示例:
import time
def log_calls(func):
def wrapper(*args, **kwargs):
now = time.time()
print("Calling {0} with {1} and {2}".format(
func.__name__,
args,
kwargs
))
return_value = func(*args, **kwargs)
print("Executed {0} in {1}ms".format(
func.__name__,
time.time() - now
))
return return_value
return wrapper
@log_calls
def test1(a,b,c):
print("\ttest1 called")
@log_calls
def test2(a,b):
print("\ttest2 called")
@log_calls
def test3(a,b):
print("\ttest3 called")
time.sleep(1)
test1(1,2,3)
test2(4,b=5)
test3(6,7)
不一定要在语法上那么漂亮;我了解所有语言都有其细微差别,并且我知道 PHP 不支持该语法。但是我还是希望能够在尽可能少的重写代码的同时达到同样的效果。
【问题讨论】:
-
祝你好运,但基本上装饰器是返回函数的函数,你可以稍后调用,所以如果你可以在 php 中返回一个函数,你应该能够做到这一点,看看:@987654321 @也是。