我正在用PHP编写基本的插件系统。我已经研究了装饰者和观察者。
为了保持较小的学习曲线,我希望能够在关键位置编写field_to_update
(不传递任何其他参数),并将其替换为共享的一些相应代码相同的变量范围,好像我只是简单地subjobs_subjobid = request.POST[('subjob_id')]
field_to_update = ('subjob_name','subjob_type', 'rerun_id', 'priority_id', 'transfer_method', 'suitefile', 'topofile')
post_data = request.POST
to_be_updated = {field: post_data.get(field) for field in field_to_update if field in post_data}
# then you need to get the object, not filter it
try:
subjobinstance = SubJobs.objects.get(id=subjobs_subjobid)
subjobinstance.update(**to_be_updated, updated=datetime.now())
except ObjectDoesNotExist: # from django.core.exceptions
print('There is no such object') # better to use logger
except Exception as e:
print("PROBLEM UPDAING SubJob!!!!")
print(e.message)
代码。
目前,hook($someHookNumber)
运行已在给定钩子编号(在本例中为1)注册调用方法(和类)的任何函数。因此,范围至少是方法下面的两个函数这叫做include
。
虽然像hook(1)
这样的成员变量可以被完美地操作,但是两个函数向下(如果被对象调用),任何非成员变量(如hook()
)都只能在插件函数的范围内进行操作。
简单的解决方案是“只使用成员变量”或“使用全局变量”,但我宁愿$this->exampleVariable
尽可能与$text
类似,以避免将来出现问题。