先是看了ASP.NET,后又看了PHP社区中开源的PRADO(事件驱动模型)项目,由于PRADO开展不久(去年六月发起,到现在发展到2.0版,但我看了一下,其仍然很不成熟,有诸多限制,当然,如有更多的人关注,其前景是很好的,将来说不定还能成为PHP标准事件驱动模型库),我在想能否利用现有资源简单地模拟事件驱动型程序设计,下面是我试验的代码。
就像ASP.NET一样,需要HIDDEN类型的INPUT标签和FORM的POST方法的支持。不同的是,在这里必须需要JavaScript的辅助才能完成。
做到更加抽象的高阶,可以把所有事件函数(PHP的)抽象出来,组成像ASP.NET里的Code behide一样的形式。当然,也可以把模板也独立出来。也就是,专门写一个PHP类(这个文件,就是所谓的Code behide文件),处理此页面的所有事件。事件触发函数名和在表单中JavaScript使用的事件函数名有关联(在本例中,使用同样的函数名)。以此设计,寄希望于统一事件处理模型,使开发者能专注于逻辑功能的实现。而不再耗费大量的代码和时间来处理表单验证问题。
<?php
// 自定义事件函数
function button1Click()
{
if ($_POST['text1'] != "password")
echo("Error");
}
function button2Click()
{
$_POST['text1'] = "";
}
// 判断函数
if (isset($_POST['hidden1']) && $_POST['hidden1'] != "")
{
$_POST['hidden1']();
}
?>
<html>
<head>
<title>
你好中国
</title>
<script language="javascript">
function button1Click()
{
hidden1.value = "button1Click";
formPost.submit();
}
function button2Click()
{
hidden1.value = "button2Click";
formPost.submit();
}
</script>
</head>
<body>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST" id="formPost">
<input type="hidden" name="hidden1" id="hidden1" value=""/>
<input type="text" name="text1" id="text1" value="<?=$_POST['text1']?>"/>
<input type="button" name="button1" id="button1" value="提交" onclick="button1Click()"/>
<input type="button" name="button2" id="button2" value="重置" onclick="button2Click()"/>
</form>
</body>