这个PHP模板中的<! - ?=是什么意思 - >

时间:2012-12-31 07:59:04

标签: php

  

可能重复:
  Reference - What does this symbol mean in PHP?

我尝试运行PHP-Nemid的测试脚本有点失败。我试图通过代码工作,但是当它到达render函数时变得有点迷失,它使用了文件“nemid.tpl.php”。当我运行脚本时,模板文件字面上写入屏幕,在某种意义上,PHP填写相关的模板变量,而不是只写文字PHP代码。换句话说,<?= $some_var_value与渲染页面的源代码中的一样。

我不明白的另一件事是模板文件中<?=的含义是什么。这不是我熟悉的PHP构造。起初我以为我应该将<?= $some_var更改为<? print $some_var,但在这种情况下,它仍会将文字PHP代码打印到页面。

如果有人能够让我对这里发生的事情有所了解,将不胜感激。

模板文件(nemid.tpl.php)

<html>
<body>
        <form id="signedForm" name="signedForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
                <div id="applet">
<!-- div ID used for overlay / modal-box -->
                    <applet name="DANID_DIGITAL_SIGNATUR" tabindex="1" archive="<?= $ServerUrlPrefix ?>/bootapplet/1234567" code="dk.pbs.applet.bootstrap.BootApplet" width="200" height="250" mayscript="mayscript" style="visibility: visible; ">
                        <param name="ServerUrlPrefix" value="<?= $ServerUrlPrefix ?>"> 
                        <param name="ZIP_BASE_URL" value="<?= $ZIP_BASE_URL ?>">
                        <param name="ZIP_FILE_ALIAS" value="<?= $ZIP_FILE_ALIAS ?>">
                        <param name="log_level" value="<?= $log_level ?>"> 
                        <param name="paramcert" value="<?= $paramcert ?>">
                        <param name="signproperties" value="<?= $signproperties ?>"> 
                        <param name="paramsdigest" value="<?= $paramsdigest ?>"> 
                        <param name="signeddigest" value="<?= $signeddigest ?>"> 
                        <param name="MAYSCRIPT" value="<?= $MAYSCRIPT ?>"> 
                    </applet>
                </div>
            <input type="hidden" name="signature">
            <input type="hidden" name="result"> 
        </form>
<script type="text/javascript">
    function onLogonOk(signature) {
        document.signedForm.signature.value=signature;
        document.signedForm.result.value='ok';
        document.signedForm.submit();
    }
    function onLogonCancel() {
        document.signedForm.result.value='cancel';
        document.signedForm.submit();
    }
    function onLogonError(emsg) {
        document.signedForm.result.value=emsg;
        document.signedForm.submit();
    }
</script> 
</body>
</html>

渲染功能

我已经在下面的函数中测试了$ vars的内容,并且可以确认模板所需的提取变量是否存在。

function render($template, $vars = array())
{
    extract($vars);
    ob_start();
    include('../templates/' . $template . '.tpl.php');
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

3 个答案:

答案 0 :(得分:4)

<?=是echo的短开标签。

<?='Hello world'?>

输出Hello world

为了回答为什么它没有解析,文件名是什么?您是否安装了PHP并配置为与Apache / Nginx /其他服务器配合使用?

需要注意的另一件事是您使用的模板PHP_SELF

PHP_SELF实际上会打开许多​​漏洞,不建议使用。您可以使用替代方案:

basename(__FILE__);

答案 1 :(得分:1)

  <?=

是php的简写

  <?php echo 

答案 2 :(得分:0)

<?=

被模板制作者用作速记,因为他们在大多数文件中使用HTML,只是根据需要在PHP中打印变量。

我的服务器已启用,但可以在旧版本中关闭或不使用。