脚本宝典收集整理的这篇文章主要介绍了PHP – 链接触发器如何创建/存储?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试过这个
$Trigger_123 = new stdClass(); $Trigger_123->name = "Name"; $Trigger_123->renderOn = ? // (object_345->throwedInLakeX) ?
我怎样才能将它存储在MysqL中?我可以检查一下它的链条部分吗?我也试过MysqL触发器,但我找不到在这些触发器上执行PHP的方法.例如,在更新或删除时运行PHP代码.
Cron的工作不是一个选择,因为将来会添加很多东西,而cron的工作将花费大量的时间来完成,我希望找到一个更基于PHP的解决方案.
编辑(添加一些额外信息)
我试图以多种方式实现这一点.我最终得到了一个dePEndecies系统,就像Debian软件包一样,我相信它不适合这个.
@L_360_17@结构
Table "object" -------------- ID (int) Name (vArchar) Table "triggers" ---------------- ID (int) Name (VARchar) Data (blob) // usually,I Store PHP code and use eval to run Table "attributes" ------------------ ID (int) attribute (varchar) value (blob) Table "object_has_triggers" --------------------------- ID (int) ObjectID (int) TriggerID (int) Table "object_has_attributes" ----------------------------- ID (int) ObjectID (int) AttributeiD (int)
>数据库事务,在提交之前和之后到数据库
>附加X触发器的对象,解决它们
>如果满足对它的所有依赖,则检查由X触发的每个触发器
不要重新发明轮子,这有一个令人难以置信的简单解决方案:在数据库调用之上有一个层.
不是直接查询数据库,而是调用处理数据库插入触发器的函数(可能在对象中).正是在那里,您可以添加您的代码,以您喜欢的方式预先处理和后处理您的触发器.
function PRoceSSDatabaseInsertion($trigger) { //Preceding code goes here //Database transaction goes here //Post-processing code goes here } $Trigger_123 = new stdClass(); $Trigger_123->name = "Name"; $Trigger_123->renderOn = $object_345->throwedInLakeX; processDatabaseInsertion($Trigger_123);
过度简化,但你明白了.我建议为你的触发器编写一个自定义类,但是我以程序的方式编写它,因为我不知道你是否熟悉OOP.
原理与以前相同.如果你使用PHP> = 5.3,你可以使用闭包来增加它的味道:
function processDatabaseInsertion($trigger) { //Preceding code goes here $trigger->renderOn(); //Database transaction goes here //Post-processing code goes here } $Trigger_123 = new stdClass(); $Trigger_123->name = "Name"; $Trigger_123->renderOn = function() use ($Trigger_123) { doAwesomeThing($Trigger_123); } processDatabaseInsertion($Trigger_123);
或者采用更传统的方法:
function processDatabaseInsertion($trigger) { //Preceding code goes here swITch($trigger->renderOn) { case "awesomeThing": doAwesomeThing($trigger); break; case "anotherThing": break; default: break; } //Database transaction goes here //Post-processing code goes here } $Trigger_123 = new stdClass(); $Trigger_123->name = "Name"; $Trigger_123->renderOn = "awesomeThing"; processDatabaseInsertion($Trigger_123);
可以通过上面的方法轻松处理更多的PHP逻辑,您将能够分辨出来.例如,您可能希望每次需要处理触发器时调用一个泛型函数,该触发器依次检查依赖性是否满足,如果是,则运行特定触发器.
以上是脚本宝典为你收集整理的PHP – 链接触发器如何创建/存储?全部内容,希望文章能够帮你解决PHP – 链接触发器如何创建/存储?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。