由于PHP和Javascript对数组元素和对象属性的访问很相似又有所区别,有时会将一种特定的写法用在另一种语言上面而导致出错,所以将它们的区别记录下来:
1、在PHP中,访问数组中的元素只能通过 数组名['下标'] 的形式来访问,如
<?php
//定义数组
$arr = array('os'=>'linux', 'server'=>'apache', 'database'=>'mysql', 'lang'=>'php');
//访问数组中的元素
echo $arr['server'];//apache
//echo $arr.server;//运行出错
//echo $arr->server;//运行出错
2、在PHP中,访问对象的属性只能通过 对象名->属性名 的形式来访问,如
<?php
//定义person类
class person{
public $username = "zhangsan";
}
//实例化对象
$p = new person();
//访问对象的username属性
echo $p->username;//zhangsan
//echo $p['username'];//运行出错Fatal error
//echo $p.username;//运行出错Fatal error
3、在Javascript中,数组元素的访问可以通过 数组名['下标'] 或者 数组名.下标(这个下标指的是字符串下标)的方式来访问或者 定义数组元素:
<script type='text/javascript'>
var fruit = [3, 6, 9];
//定义数组元素(或者说数组的属性)
fruit['price'] = 100;
fruit.name = 'apple';
//输出数组元素
alert(fruit.price);//100
alert(fruit['name']);//apple
</script>
4、在Javascript中,访问对象的属性也可以通过 对象名['属性名'] 或者 对象名.属性名 的方式来访问或者定义,如:
<script type='text/javascript'>
//实例化对象
var person = new Object();
//定义对象属性
person.name = "zhangsan";
person['hobby'] = "basketball";
//输出对象属性
alert(person['name']);//zhangsan
alert(person.hobby);//basketball
</script>
从上面的例子中可以发现,Javascript中对象属性的访问方式与数组中具有字符串下标的元素的访问方式是一样的,原因是在Javascript中数组也是属于对象object,其中的字符串下标也就是数组对象的属性。
而在使用ThinkPHP时,发现在模板文件中对数组元素和对象属性的访问又有所区别:
假设我们在某一个控制器中分配了如下变量:
$this->assign('obj', 对象);
$this->assign('arr', 数组);
那么在相应的模板文件中可以这样使用:
//输出数组元素时
{$arr.字符串下标}或者{$arr['字符串下标']}
//输出对象属性时
{$obj->属性}或者{$obj:属性}
暂时总结到这里,以后发现新的区别再补充~~~