2010-03-25 71 views

回答

3
当然

?> 
alert('Congrats'); 
<? 
+0

我花了一秒才明白为什么这些PHP标签看起来倒退了! – 2010-03-25 19:07:20

+3

第二个PHP标记将在short_open_tag = 0的安装中中断。 '<?php'效果更好。 – fuxia 2010-03-25 19:21:55

8

只要把你的JavaScript代码的PHP代码之外:

<?php 
    // your PHP code goes here 
?> 
// your javascript function out of the PHP tag. 
function f() { 
    alert('congrats'); 
} 
+0

这也是我的首选,转义PHP和输出标记或JS。 – bdl 2010-03-25 19:03:24

+0

只适用于大块,否则会变得非常*杂乱/不可读! – Veger 2010-03-25 19:07:48

2

如果你真的必须从PHP打印出来执行JS,它至少如果您将js功能存储在某个文件的功能中,然后通过打印呼叫进行调用,请保持清洁。

0

可以使用模型 - 视图 - 控制器模式用于输出的JavaScript。

你可以有大部分的JS是存储在 “视图” 文件:

myJavascript.js.php:

alert('hello bob'); 
alert('hello <?php echo $name; ?>'); 
alert('whats up?'); 

你的控制器,jsController.php:

$name = "Jane"; 
2

我建议保留PHP文件只是为PHP代码,并保持你的前端代码(HTML/CSS/JavaScript)的单独的模板文件。

我最后一次检查,混合表示层&后端代码放到同一个文件是流行大约12年前。

您的项目文件的层次结构看起来是这样的:

- my_project 
    - lib 
     - PHP files here 
    - templates 
     - HTML templates here 
    - public <- this is your document root for web server 
    - index.php <- just a dispatcher 
    - js 
    - images 
    - css 
+1

+1我会用这个目录树来完成它,但是这个想法依然存在:JS除了在需要动态生成它们的罕见情况下,必须在分离文件中使用kep。 – 2010-03-25 20:14:01

1

使用here文档,或打破了PHP模式为“HTML”模式。如果JavaScript是完全静态的,或有需要有包括一些PHP价值几部分,放到HTML模式(“?>”出来的PHP)。这将允许任何像样的文本编辑器意识到您正在执行HTML和Javascript,并根据需要突出显示语法。以下都是等价的,但自己决定哪个更可读:

'纯PHP':

<?php 
    echo '<script>'; 
    echo ' var x = [' . $somePHPvar . '];'; 
    echo ' alert(x);'; 
    echo '<script>'; 
?> 

'定界符' 语法:

<?php 
echo <<<EOF 
    <script> 
     var x = [{$somePHPvar}]; 
     alert(x); 
    </script> 
EOF; 
?> 

'HTML模式':

<?php ?> 
<script> 
    var x = [<?php echo $somePHPVar ?>]; 
    alert(x); 
</script> 

加分/每个劣势:

  1. 纯PHP:你可以留在PHP模式,你的回声+ $瓦尔将被突出显示为PHP代码,但HTML/JavaScript的你呼应将被视为纯文本和彩色本身(即:全部相同的颜色)
  2. heredoc语法:您停留在PHP模式下,但获得不必在代码中转义任何引号('")的好处,因此任何html看起来都会更干净。大多数编辑器都会识别heredoc块中的PHP变量并适当地给它们着色,但其余的文本将被视为文本,所以javascript/html看起来是一样的。另外,您不能将函数调用插入到文本中。您必须在启动heredoc之前执行这些操作,并将结果存储在可插入的变量中。 HEREDOC也可用于将长文本块直接分配给变量。
  3. 'html mode':编辑器会看到/识别你的html,javascript和php,并为它们适当地着色。但这是以不得不在任何需要动态填充某个值的地方撒上php open/close标记为代价的。另外,您可以直接插入函数调用结果(htmlspecialchars(),urlecncode()html_strip_tags()等),而不必将值存储在中间变量中。它还会导致难以维护的代码,因为您的PHP现在通过html/javascript代码随机播放。

这一切都归结为您正在使用的特定代码最简单的。