[英]Good Programming Practices With PHP With Concatenating HTML
我正在尝试将PHP与HTML连接起来,我想知道它的最佳实践是什么。 到目前为止,我已经接近它了: - 已经完全显示了脚本 -
<?php include("header.php"); ?>
<div id="main">
<table id="mainTable">
<tr>
<td id="leftPane">
<div class="pgbody">
<div class="subblock">
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<table width="100%" cellpadding="10" cellspacing="0">
<tr>
<td colspan="3" style="width:99%">
<label for="isVersion">InstallShield Version</label><br />
<select name="isVersion" onchange="javascript:setTimeout('__doPostBack(\'ddlVersion\',\'\')', 0)" id="isVersion" class="box">
<option value="2012Spring">2012 Spring</option>
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2009 Express">2009 Express</option>
<option value="IS2008">2008</option>
<option value="IS2008 Express">2008 Express</option>
</select>
<tr>
<td colspan="3" style="width:99%">
<br />
<input type="checkbox" name="no_internet" value="no_internet"> no_internet
</td>
</tr>
<tr>
<td colspan="3" style="width:99%">
<br />
<input type="submit" name="submit" value="Submit">
</td>
</tr>
</tr></table>
<?php
if(isset($_POST['submit']))
{
echo "<h2>Response</h2><br />";
$isVersion = $_POST["isVersion"];
$output_script = "
<p>Hello, <br />
To activate InstallShield, please follow the steps below:<br /><br />
1. Launch a Command Prompt window and browse to the directory - 'C:\Program Files\InstallShield\\$isVersion\System' (or 'Program Files (x86)' on a 64 bit machine)<br />
2. You will need to pass the parameter '/return' to the executable 'TSconfig' as below<br />
'C:\Program Files\InstallShield\\$isVersion\System\TSconfig.exe /return'<br />
3. Providing the machine has a valid internet connection the license will deactivate and the message in the dialog will reflect this<br />
4. Re-launch InstallShield.exe and you will be presented with the same activation dialog as before<br />
5. Proceed with the activation normally<br />
6. The dialog should show a successful activation message and the product should remain activated at this stage.<br />
</p>";
?>
<div class="ResponseBox" style="background-position: 0 0;">
<div class="ResponseText">
<?php echo $output_script;
}
?>
<?php
elseif(isset($_POST['submit']) && $_POST['no_internet'])
{
echo "<h2>Response</h2><br />";
$isVersion = $_POST["isVersion"];
$no_internet = $_POST["no_internet"];
$output_script = "
<p>Hello, <br />
To activate InstallShield, please follow the steps below:<br /><br />
1. Launch a Command Prompt window and browse to the directory - 'C:\Program Files\InstallShield\\$isVersion\System' (or 'Program Files (x86)' on a 64 bit machine)<br />
2. You will need to pass the parameter '/return' to the executable 'TSconfig' as below<br />
'C:\Program Files\InstallShield\\$isVersion\System\TSconfig.exe /return /$no_internet'<br />
3. Providing the machine has a valid internet connection the license will deactivate and the message in the dialog will reflect this<br />
4. Re-launch InstallShield.exe and you will be presented with the same activation dialog as before<br />
5. Proceed with the activation normally<br />
6. The dialog should show a successful activation message and the product should remain activated at this stage.<br />
</p>";
?>
<div class="ResponseBox" style="background-position: 0 0;">
<div class="ResponseText">
<?php echo $output_script;
}
?>
</div>
</div>
</div>
</td>
<td id="rightPane">
<div class="PromoBox" style="background-position: 0 0;">
<div class="PromoText">
<?php
echo "<h2>Related KB Article: </h2><br />";
echo "<h3>Deactivation of IS - Q201081</h3>";
?>
</div>
</div>
</td>
</tr>
</tr>
</table>
</div>
正如您所看到的,PHP和HTML在需要时会相互连接。 我想知道,但是,如果这实际上是最好的方法,我应该使用PHP回应所有内容,而不是像上面那样做?
我也试图在这下面写一个elseif块,它给了我一个错误,说明elseif是意外的,这就是让我觉得我接近这一切都错了。
当我看到人们制作的大型项目时,我注意到每个文件中几乎没有任何东西,而且肯定不会有很多HTML可见。 假设大多数都在对象或类中,我是否正确? 任何建议或参考将不胜感激。 提前致谢。
您可能会从不同的人那里得到不同的“最佳实践”描述。 我会选择PSR-1
代码格式化标准,其中包括重点:
我还建议您的PHP代码不要直接打印任何HTML,而是使用模板。 我是模板引擎的忠实粉丝,其中有很多。 人们也会说“php本身就是一个模板引擎”,如果你愿意的话你也可以使用它。 保持模板(显示)尽可能多的逻辑。
提前与您的团队确定您的标准并坚持下去。 关于echo
或?>
是否更好的观点可能存在差异,但一旦你决定,就要保持一致。 保持缩进也很重要。 如果你这样做,你可能会找到使你的elseif
不正确的缺失括号。
就像batmegakapa已经解释的那样, 执行逻辑/内容生成和查看是两个不同的任务。 现代Web应用程序的复杂性通常要求使用这种方法来保持代码的可读性和可理解性,以及可重用性。
这是(大致)原因,为什么MVC模式(模型/视图/控制器)和模板系统是当今大多数框架的组件。
当然,不可能给出一个解决方案 ,因为它取决于个人偏好和要求 - 这使得这个问题有争议,过于本地化,并且不符合Q&A风格。
但是,当遵循规则不混合逻辑和内容时,您很可能会这样做(基本方法):
no_internet_form.php
:
<?php
if(isset($_POST['submit']) && $_POST['no_internet'])
{
//echo "<h2>Response</h2><br />";
$Version = $_POST["isVersion"];
$no_internet = $_POST["no_internet"];
$script_result = execute_the_incredibly long_script($Version, $no_internet);
}
// more business logic ...
include 'views/no_internet_form.html.php';
?>
views/no_internet_form.html.php
:
<?php if(isset($script_result)): ?>
<div class="ResponseBox" style="background-position: 0 0;">
<div class="ResponseText">
<?php echo $script_result; ?>
</div>
</div>
<?php endif; //isset($script_result) ?>
另一件事就是顺便说一下:我怀疑你提供的代码部分实际属于if
块,因为这对我来说并不明显。 你的例子的HTML代码在某种程度上没有多大意义。
它可能只是为了演示,但是我需要几秒钟才能真正理解你的例子。 这应该更具可读性 - 特别是在大型项目中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.