PHP / JS / DOM中的引号

时间:2012-03-20 09:19:32

标签: php javascript html syntax

使用引号的正确方法是什么?

echo 'string' . $variable . 'anotherstring'; 

echo "string" . $variable . "anotherstring";

当我们需要打印,返回或回应配额mrk本身时,问题当然会曝光......

$output = '<div class="' . $class . ' " style =" ' . $style . ' ">' ;

$output = "<div class=' " . $class . " ' style =' " . $style . " '>" ;

...

当一些jQuery或Javascript进入游戏时呢?

function o99_print_front_script() {
    return '
    <script type="text/javascript">
var pluginDir = " '. PHP_CONSTANT_X .' " ; 

  var cluster_styles = [{
        url:pluginDir +"/images/marker-o.png",
        background: "#c6c6c6"
        textColor: "#0f0"
    }];

      jQuery(document).ready(function() {
        jQuery("#example").example_func({
          elements:".div_1 .class_2",
           infobox: true,   
        map_opt: {zoom: 3,
        mapTypeId: google.maps.MapTypeId.ROADMAP},
        infobox_s:s_infobox_k,
        marker_icon:pluginDir +"/images/image_1.png"
});
});
</script>
    ' ;}

OR

function o99_print_front_script() {
    return "
    <script type='text/javascript'>
var pluginDir = ' ". PHP_CONSTANT_X ." ' ; 

  var cluster_styles = [{
        url:pluginDir +'/images/marker-o.png',
        background: '#c6c6c6'
        textColor: '#0f0'
    }];

      jQuery(document).ready(function() {
        jQuery('#example').example_func({
          elements:'.div_1 .class_2',
           infobox: true,   
        map_opt: {zoom: 3,
        mapTypeId: google.maps.MapTypeId.ROADMAP},
        infobox_s:s_infobox_k,
        marker_icon:pluginDir +'/images/image_1.png'
});
});
</script>
    " ;}

这有什么规格吗?一些标准?一些“最佳实践”?

浏览代码,您可以看到所有类型的示例。

我们应该将哪一个用于“第一级”而哪一个用于“第二级”? 如果我必须“嵌套”那些级别的那3级呢?

当一个人使用某个CMS或带有“插件”的系统时,这个问题突显出来 - 然后想用自己的代码扩展它。在DOM中产生的HTML代码变得混乱,你无法理解哪个引用是哪个特别是当JS参与时。)

我知道他们所有人都会工作,但我想知道哪一个是对的,哪个是错的(如果存在这样的条款)。

编辑我

在阅读评论/答案后 - 我意识到也许我以不清楚的方式写了这个问题。我的问题是输出的xHTML / JS。 当然它对PHP部分有直接影响,但主要是我想知道在完成的文档中维护一致的一致代码同时在后端保持简单语法的最佳实践是什么.. 即使在这里查看此页面的源代码(此stackexchange站点),也可以看到一些不一致的行为(至少对我而言看起来像它)

6 个答案:

答案 0 :(得分:3)

关于标记嵌套我强烈建议采用MVC pattern,这样您就可以从控制器部分(您必须放入模板中)清楚地分离视图(您的html模板)。通过这种方式,您可以避免制作不可比较的标记和PHP代码的“汤”

无论如何,对于标记部分,我更喜欢这样写作

echo "string $variable anotherstring";

因为PHP变量在包含在带双引号分隔符的字符串中时会被解析。对于像javascript部分这样的长代码块,另一种可能性就是使用HEREDOC syntax,这样就可以编写像这样的php变量了

$jssnippet = <<<EOJS
   <script type='text/javascript'>
   var pluginDir = '{$PHP_CONSTANT_X}' ; 
   ...
EOJS;

另见http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc 希望这有帮助

答案 1 :(得分:1)

如果使用双引号,PHP将尝试评估字符串中的内容,其中单引号作为文字,因此就性能而言,如果您更快地使用单引号。

答案 2 :(得分:1)

看一下这个例子

  echo "<a href='javascript:dosomething(\"isn\'t it a good day?\");'></a>";

主要思想是内部引用不得干扰父代。

答案 3 :(得分:1)

declare and use string literals有很多种方式。在您的代码中开始混合所有此类方法之前不久。我个人更喜欢在任何地方使用双引号字符串,即使它需要我写:

"<div foo=\"" . bar() . "\">\$blah</div>";

双引号字符串允许您在字符串中使用变量。

至于您上面提到的示例,有更好,更易读的方法,例如:

function k99_print_front_script() {
    ob_start();
    ?>
    <script type='text/javascript'>
        var pluginDir = '<?php echo PHP_CONSTANT_X; ?>'; 
        var cluster_styles = [{
            url:pluginDir +'/images/marker-o.png',
            background: '#c6c6c6'
            textColor: '#0f0'
        }];
        jQuery(document).ready(function() {
            jQuery('#example').example_func({
                elements:'.div_1 .class_2',
                infobox: true,   
                map_opt: {zoom: 3,
                mapTypeId: google.maps.MapTypeId.ROADMAP},
                infobox_s:s_infobox_k,
                marker_icon:pluginDir +'/images/image_1.png'
            });
        });
    </script>
    <?php
    return ob_get_clean();
}

关于您是否存在标准的问题,我正在查看几个PHP代码格式化程序,它们将我带到了此页面:PEAR Manual -- Coding Standards。我没有找到关于字符串的建议,尽管这些例子一直使用'封闭的字符串。

答案 4 :(得分:0)

对于php,无论您使用的是"还是',都会有所不同。 '"更高效,因为它不会解析字符串以检查要替换的变量。

至于Javascript - 使用你喜欢的... JS不在乎。如果您需要在字符串中使用引号,只需同时使用var mystring = "I said 'Hello World!'";

即可

答案 5 :(得分:0)

对于HTML和Javascript,它取决于偏好,但PHP是不同的。

在HTML中,标记属性可以是双引号或单引号 - 这在the spec中定义。如果您检查页面来源,大多数人似乎都使用双引号,但没有什么可以阻止您使用单引号。

在Javascript中没有理由使用一个比另一个更多 - 事实上,使用似乎相当分裂。您注意到的一个考虑因素是,如果您对HTML属性进行双重引用,那么单引Javascript字符串意味着您可以使用内联Javascript而不会破坏您的正常风格。例如。 <a href="alert('Hello, world')">。有一个很好的介绍here

然而,PHP是不同的。针对变量解析双引号字符串,需要额外的开销。它不会是一个巨大的消耗,但它肯定是一个很好的做法。在PHP中

$string = 'This is my ' . $variable;

$string = "This is my $variable";

产生等效输出。因此,在PHP中使用单引号字符串更有效,或者在必要时学习使用双quoted string syntax

最后,这完全取决于你,但这些都是规范。如果你偏离标准用法,你将不会受到惩罚,但重要的是要了解完整的含义,尤其是PHP。