PHP/JS/DOM中的引号
Quotation marks in PHP / JS / DOM
使用引号的正确方法是什么?
echo 'string' . $variable . 'anotherstring';
或
echo "string" . $variable . "anotherstring";
当然,当我们需要打印、返回或回显quotaion 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>
' ;}
或
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时)。
我知道所有这些都会起作用,但我想知道哪个是对的,哪个是错的(如果在这方面存在这样的术语的话)。
编辑I
在阅读了评论/答案后,我意识到也许我写这个问题的方式不清楚。我的问题是关于输出的xHTML/JS。当然,这对PHP部分有直接的影响,但我主要想知道,在完成的文档中保持一致且统一的代码,同时在后端保持简单的语法,最佳做法是什么。。即使在这里查看这个页面的源代码(这个stackexchange站点),也可以看到一些不一致的行为(至少在我看来是这样)
关于标记嵌套,我强烈建议采用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希望这能帮助
如果你使用双引号,PHP将尝试评估字符串中的内容,其中单引号被视为文字,就性能而言,如果你更快地使用单引号。
看看这个例子
echo "<a href='javascript:dosomething('"isn''t it a good day?'");'></a>";
主要思想是内部引用不得干扰父引用。
有很多方法可以声明和使用字符串文字。用不了多久,您就可以开始在代码中混合所有这样的方法。我个人更喜欢在任何地方使用双引号字符串,即使它需要我写:
"<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手册——编码标准。我找不到关于字符串的推荐,尽管示例始终使用'
封闭的字符串。
对于php,无论使用"
还是'
都会有所不同。'
比"
更具性能,因为它不会解析字符串来检查要替换的变量。
至于Javascript,请使用您喜欢的。。。JS不在乎。如果您需要在字符串中使用引号,只需同时使用var mystring = "I said 'Hello World!'";
即可。
对于HTML和Javascript,这取决于偏好,但PHP不同。
在HTML中,标记属性可以是双引号,也可以是单引号-这是在规范中定义的。如果你检查页面来源,大多数人似乎都使用双引号,但没有什么可以阻止你使用单引号。
在Javascript中,没有理由使用其中一个而不是另一个——事实上,使用似乎相当分裂。您已经注意到的一个考虑因素是,如果您对HTML属性进行双引号引用,那么对Javascript字符串进行单引号引用意味着您可以在不破坏正常风格的情况下使用内联Javascript。例如<a href="alert('Hello, world')">
。这里有一个很好的介绍。
然而,PHP不同。双引号字符串被解析为变量,这需要额外的开销。这不会是一个巨大的消耗,但这肯定是一个很好的做法。在PHP 中
$string = 'This is my ' . $variable;
和
$string = "This is my $variable";
产生同等的产出。因此,在PHP中使用单引号字符串更有效,或者在必要时学习使用双引号字符串语法。
最终,这完全取决于你,但这些都是规范。如果你偏离了标准用法,你不会受到惩罚,但了解其全部含义很重要,尤其是PHP。
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 从popup.js|Chrome扩展访问DOM
- 如何让React JS点击处理程序在执行时更新DOM
- JS应用程序中基于DOM的XSS保护
- React.js如何使用虚拟DOM加速渲染
- spin.js/angular spinner:如何将spin定位到DOM元素中(包括plunker演示)
- 正在寻找从JSON/对象构建DOM客户端的JS库
- Ember.js-获取DOM元素的模型数据
- Ember.js:通过绑定/模型查找DOM元素
- 你能在JS中获得一个样式而不将其附加到DOM元素吗
- 来自jQuery,如何在React.js中制作DOM动画?例如设置进度条的动画
- 在执行JS脚本后监视对DOM的更改
- Angular JS根据搜索结果和点击事件更新DOM元素
- 在 Greasemonkey 中修改 Angular JS 中的 DOM 元素
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- Raphael JS:如何从 Dom 对象(Element.node)获取 Raphael 元素
- JS DOM - document.getElementById 和按名称选择之间的区别
- 如何访问IE XHTML DOM+JS引擎,而无需启动浏览器本身
- 通过DOM - JS创建事件时传递元素作为参数
- 使用HTML DOM JS分配事件