作者gpmm (银色)
看板PHP
标题Re: [请益] 关於购物车的cookie问题 (新手第一次发文
时间Sat Mar 23 23:19:58 2013
※ 引述《kerash (K.T)》之铭言:
: → aatty:那$book_no_array=explode(",",$COOKIE["book_no_list"]); 03/23 20:17
: → aatty:=等号左边可以写成$book_no_array[]吗?@@ 03/23 20:18
: → kerash:不能说不行,但是你要了解这样设定变数会变成甚麽结果 03/23 20:19
: 推 aatty:意思不一样吗?QQ 我有点混乱了 03/23 20:23
: 推 aatty:两个不都是阵列吗? 03/23 20:32
:
: 这应该是你对变数观念的问题
: 先知道等号左边与等号右边各代表的意义
: 左边可以当成是一个「容器(变数)」,右边则是要放入的东西
: 等号的意思就是把右边的内容方进左边的容器里
: 那php的变数,在未指定时通常都很弹性
: $a = 1; // 这时 $a 属性是数字
: $a = "1"; // $a 属性是字串
: $a = array('a','b'); // $a 属性是阵列
: 因此可以知道负责当容器的变数是很有弹性的,
: 他会改变自己的属性变成你给他的样子
k 大讲的差不多了,小弟稍微补充一点,
其实左侧的变数(或着说容器)在赋值之後,
会标注起来自己身上携带的是哪一种变量(integer / string / array …)
这部份有兴趣可以看 Laruence 大神的这篇文章,
http://www.laruence.com/2008/08/22/412.html
其中有解释在 ZE(Zend Engine,
http://en.wikipedia.org/wiki/Zend_Engine,
也就是 PHP 的引擎)里是如何处理的(in c language)
: 接着看右边的部分,
: 以你的 explode 来看,是 Returns an array of strings, ...
: 也就是说,你是要将一个阵列丢入你所指定的容器里面
: 既然 $a 的型态会自动改变的,
: 那当你要将阵列丢进去後,左边的 $a 自然会自己转型
: 而不用你自己去把 $a 当成阵列
: 但是你这样的写法也不会有错,因为 $a 很弹性的原因
: 因此当你使用 $a[] 时,
: $a 被自动转换成阵列并分配区域给你存放右边的东西
$a[] 这种其实是既存 array 的特殊操作,
在 $a 如果尚未赋值,或是阵列时才可以这样用,
如果 $a 已经被赋值为其他型态,你会收到这样的警告
Warning: Cannot use a scalar value as an array
并且被拒绝赋值(我的环境是 PHP 5.4.12,不确定之前的版本会不会 reject)
此部份可以参考
http://php.net/manual/en/language.types.array.php
其中有一段 Creating/modifying with square bracket syntax
: 以结果来看他没有错,只是不是你的需求
: 直接说两者的结果差别如下
: $a = explode(",","a,b");
: => $a = array (
: 'a' ,
: 'b'
: );
: $a[] = explode(",","a,b");
: => $a = array (
: array (
: 'a' ,
: 'b'
: )
: );
: 以上
: 说得太多太复杂了~"~ 如果有错请各位大大帮忙勘正
感谢 k 大的热心说明(
抛砖引玉什麽的绝对是个误会…囧) orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.175.40.79
1F:→ aatty:我看完了 谢谢你~~ 03/23 23:34
2F:推 kerash:谢谢gpmm大补充,我中间那边没明确说到为赋值状态的差异~ 03/23 23:48
3F:→ kerash: 未 03/23 23:49
4F:推 aatty:是说各位的英文都这麽好嘛...?QQ 03/24 00:07
5F:→ justoncetime:自己用抛砖引玉是自谦,所以... XD 03/24 00:10
6F:推 kerash:以板主立场说抛砖引玉没关系啦XD 这篇确实有补充了 03/24 00:29
7F:→ gpmm:…啊,x … 我好像自己恭维自己了一下…要死 03/24 01:00
※ 编辑: gpmm 来自: 1.175.40.79 (03/24 01:01)
8F:推 aatty:原来是版主XD 03/24 14:05