我正在从“Murach PHP和MySQL第二版”一书中学习PHP,我遇到了这个我不太了解的代码......
<select name="productkey">
<?php foreach ($products as $key => $product):
$cost = number_format($product['cost'], 2);
$name = $product['name'];
$item = $name . ' ($)' . $cost . ')';
?>
<option value="<?php echo $key; ?>"> <?php echo $item; ?></option>
<?php endforeach; ?>
</select>
为什么在foreach循环开头的冒号(:)后面有说明?
我读到结肠后应该有“?&gt;”然后执行指令然后在结束“”标记foreach循环结束...
请解释一下如果我在<?php foreach ($products as $key => $product): ?>
let bus = new Vue();
Vue.component('building-inner', {
props: ['floors', 'queue'],
template: `<div class="building-inner">
<div v-for="(floor, index) in floors" class="building-floor" :ref="'floor' + (floors - index)">
<h3>Floor #{{floors - index }}</h3>
<button type="button" class="up" v-if="index !== floors - floors">up</button>
<button type="button" class="down" v-if="index !== floors - 1">down</button>
</div>
</div>`,
beforeMount(){
bus.$emit('floors', this.$refs);
}
})
Vue.component('elevator', {
data: {
floorRefs: null
},
props: ['floors', 'queue'],
template: `<div class="elevator" ref="elevator">
<button type="button" v-for="(btn, index) in floors" class="elevator-btn" @click="go(index + 1)">{{index + 1}}</button>
</div>`,
beforeMount() {
bus.$on('floors', function(val){
this.floorRefs = val;
console.log(this.floorRefs)
})
},
methods: {
go(index) {
this.$refs.elevator.style.top = this.floorRefs['floor' + index][0].offsetTop + 'px'
}
}
})
new Vue({
el: '#building',
data: {
queue: [],
floors: 5,
current: 0
}
})
之后用$ cost,$ name和$ item开始编写LINES代码仍然有效?
答案 0 :(得分:0)
冒号是使用括号的替代方法。 这个:
foreach (...) :
#execute Code in loop
endforeach;
与此相同:
foreach (...) {
#execute Code in loop
}
答案 1 :(得分:0)
是的它仍然可以工作:与{相同但你必须在foreach结束时编写endforeach它会做同样的事情更多信息查看此页面 documentation
答案 2 :(得分:0)
:
称为Alternative Syntax For Control Structures。
PHP为其某些控制结构提供了另一种语法;即,if,while,for,foreach和switch。在每种情况下,替代语法的基本形式是将左大括号更改为冒号(:),并将结束大括号分别更改为endif;,endwhile;,endfor;,endforeach;或endswitch;。
它允许你从foreach中省略大括号{},使其在模板中看起来更清晰,并且最常用。
答案 3 :(得分:0)
替代语法主要用于混合html内容。主要的优点是说你有这样的东西
<?php if( $var ){ ?>
<!-- some html here -->
<?php foreach( $var as $v ){ ?>
<!-- some html here -->
<?php if( $v=='foo'){ ?>
<!-- some html here -->
<?php } ?>
<!-- some html here -->
<?php } ?>
<!-- some html here -->
<?php } ?>
你到处都是}
乱七八糟的地方,与此比较
<?php if( $var ): ?>
<!-- some html here -->
<?php foreach( $var as $v ): ?>
<!-- some html here -->
<?php if( $v=='foo'): ?>
<!-- some html here -->
<?php endif; ?>
<!-- some html here -->
<?php endforeach; ?>
<!-- some html here -->
<?php endif; ?>
这是一个小例子,所以我不认为是否完全显示了这个问题,但是if
阻止结束和foreach
结束的地方要容易得多。
现在多了约200行的混合内容。否则,您可以查看它,因为:
是{
而end{blocktype};
是}
我个人从不使用它(除了SO),因为我不会在我的代码中混用HTML和PHP。
欢呼声。