Re: [請益] 關於購物車的cookie問題 (新手第一次發文
※ 引述《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
→
03/23 23:34, , 1F
03/23 23:34, 1F
推
03/23 23:48, , 2F
03/23 23:48, 2F
→
03/23 23:49, , 3F
03/23 23:49, 3F
推
03/24 00:07, , 4F
03/24 00:07, 4F
→
03/24 00:10, , 5F
03/24 00:10, 5F
推
03/24 00:29, , 6F
03/24 00:29, 6F
→
03/24 01:00, , 7F
03/24 01:00, 7F
※ 編輯: gpmm 來自: 1.175.40.79 (03/24 01:01)
推
03/24 14:05, , 8F
03/24 14:05, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):