引用 | 編輯
anstd
2005-11-22 16:07 |
樓主
▼ |
||
x0
作者:紅軍©2005-11-21版權沒有,盜版隨便 前言: 變數是拿來幹麻的? 管它這麼多,決對不是拿來吃大便的就是了..@_@ 主講者:1加到100你會怎麼加? 路人甲:我會我會!!拿計算機1加到100 主講者:....@#$%...(換我想翻桌..XD) 認真一點啦...XD!! 最笨的方式,譬如 1+2=3,把3記在旁邊紙上 3+3=6,把6記在旁邊紙上 4+6=10,把10記在旁邊紙上 . . . 上例中的白紙,其實作用就好像是一個變數 而前面的算式呢?你可以直接想成是程式運算 但若真的把程式寫成那樣,你不吐血才怪..XD 所以就發展一下吧 <? $a=1; $b=100; $c=100/2; $d=($a+$b)*$c; echo $d; ?> 【物件導向】這個名詞,也不過就是要我們以【數學的函數觀念來思考】 不用怕,就算只會1+1=2也寫的出來 只是程式長短問題而已,天天花一點時間寫些程式練習就會進步的 好嚕,扯遠了,開始要拉回來一下下 ●變數命名 幾個原則而已 (1)一定以$開頭,不用懷疑 (2)$後第一個字元只能底線或英文大小寫字母 ex:$_ 或 $a 或 $A $a不等於$A ,大小寫有區分 (3)$後第二個字元可以用底線、英文大小寫字母、數字 ok開始嚕 $girl //合法 $Girl //合法,但跟$girl完全沒關係 $_girl01 //合法 $girl_how_much //合法 $MY_BROTHER //合法 $ABC //合法 $123 //OOPS!!開頭不能為數字喔 $girl-love //OOPS!!不可以用- 有些新手會很隨便,隨性的取無意義變數名稱 譬如 $a = $b * $c; 是沒差啦,一樣能跑 只是哪天你寫完了一長串之後,想回過頭來看自己寫了啥碗膏 大概心中會有一陣寒風吹過吧....(在寫瞎米碗糕,鬼才看的懂=O=!!) ...糟,我前面例子好像也是...XD 但寫筆記嘛‧‧‧懶的去想什麼變數名稱,看的懂在幹麻,會用就好 所以.....嘿 ●設定變數初始值 廢話少說,有請 $a $b $c 出場.... ||| $a = 1; $b = 1.2; $c = "娘什麼?老子都不老子了"; 以上是立即值,還沒有寫程式就先給他指定一種資料形態 建議由右向左看,怎麼說?就是 我把1丟給$a 我把1.2丟給$b 我把胡適在哭X的一句話丟給$c 為什麼要這樣看?我爽‧‧XD!! 沒啦!!這跟接下來要談到的運算試有關 $i = 1; $i = $i+1; echo $i 想想看,這時echo出來的$i是多少 第一行我們把1丟給了$i 第二行我們把$i再加上1,然後再丟給$i 第三行我們把$i叫出來,答案是2! 若你從左讀到右...那有可能會腦筋轉不太過來 第一行沒問題 第二行,疑?$i=$i+1,那不就1=1+1 然後腦神精開始錯亂,YA!!我改寫數學歷史 1=1+1耶.... (=_=) 其實這邊講這樣就夠了吧...?其他只是自己練習寫一些怪怪的運算試去玩就行了XD!! ●傳值 疑?這又是何許人也 $a = 100; //100丟給$a $b = $a; //$a丟給$b,這就是傳值 $b = $b+10; //$b加上10,丟給$b echo "\$a=$a <br>" . "\$b=$b"; //這段看不懂的基本上請重修資料型態 叫出$a跟$b後可以發現 $a=100 $b=110 $b經過加10的動作變成110,由此可發現,當$a傳給$b後 兩者就是毫無關係的兩個變數! ●傳址 ...傳不煩呀,它又是瞎許? 乖...我們來讓它現出原形 $a = 100; $b = $a; $c = &$a; //傳址...點點點 echo "\$a=$a" . "\$b=$b" . "\$c=$c <p>"; $b = $b + 10; $c = $c + 20; echo "\$a=$a" . "\$b=$b" . "\$c=$c"; 第4行echo出來後,$a=100 $b=100 $c=100 ,看起來沒有什麼問題 第7行echo出來後,$a=120 $b=110 $c=120 ...why?我沒設定$a呀!! 因為$c一開始我們設定為 $c = &$a,在變數前面加上& 代表的是【將$a儲存的記憶體空間與$c共用】 所以我們最後的運算式中$c = $c + 20 既然記憶體空間共用,那$c加了多少,$a也會一樣呀 XD!! ●全域與區域變數 那個‧‧‧就是‧‧‧ 先弄個結構好了 <? $man1 = 'Dino' //兩個男生在客廳 $man2 = 'Ken' echo "$man2 <br>"; //在客廳叫男生2號,Ken答有! echo "$girl2"; //在客廳叫女生2號,她聽不到 function GirlRoom(){ $girl1 = 'Anna' //兩個女生在房間 $girl2 = 'Vivienne' echo "$man1 <br>"; //在房間喊男生1號,他不曉得 echo "$girl1 <br>"; //在房間喊女生2號,Vivienne說;瞎小...(好兇) } GirlRoom(); ?> 在客廳的,就是全域變數,房間內的,就是區域變數嚕 :-) ....想開房間嗎....嘿嘿...(色鬼..|||) 那也要女生同意,男生才能進去呀..XD 這時有請global出場!! <? $man1 = 'Dino' $man2 = 'Ken' echo "$man2 <br>"; echo "$girl2"; function GirlRoom(){ global $man1, $man2; //打開門,讓色狼進來 $girl1 = 'Anna' $girl2 = 'Vivienn' echo "$man1 <br>"; //死兔崽子,馬上衝第一,一喊馬上叫 echo "$girl1 <br>"; } GirlRoom(); ?> 這告訴我們什麼?打開門色狼馬上來...嗯嗯...有理..(羞...) 奶奶個碗糕啦XD...這告訴我們全域變數無法直接在函數中使用! 若要使用,就要用global來宣告!! 若你有看過筆記一,仍舊無法使用global... 同學,認真一點,google大師隨便問都知道喔 :-) 休息一下,我去開房間..... =====分格線===== 作者:紅軍©2005-11-23 版權沒有,盜版隨便 接續前面提到的global 現在就來聊聊$GLOBALS陣列吧 使用$GLOBALS就不用在函數中宣告變數為全域變數 譬如 <? function Test(){ $GLOBALS["c"]=$GLOBALS["a"]+$GLOBALS["b"]; //以$GLOBALS方式 } ?> <? $a=10; $b=20; $c=0; Test(); //呼叫function test echo "\$a=$a , \$b=$b , \$c=$c"; //顯示$a=10 , $b=20 , $c=30 ?> 在上例中並沒有以global宣告全域變數$a $b $c 而是使用$GLOBALS陣列方式,以陣列中的變數名稱做為index 然後就取得全域變數的值....嗯嗯...很好,一堆屁話 靠X...就是 $GLOBALS["a"]就取得$a值,一句話解決... 那個...沒事做的人,不要再想了 快點!!沒事就開個筆記本寫寫PHP練習也行 有動作才有進步喔 :-) ●靜態變數 <? function Hmm(){ $i=0; $i=$i+1; echo "\$i=$i , "; } Hmm(); Hmm(); Hmm(); ?> 呼叫三次自定函數Hmm來看看 $i=1 , $i=1 , $i=1 , 三次的結果都是$i=1 每當執行完一次函數後,變數$i馬上就被殺頭 下回再叫出來,結果還是現出$i=1,然後再殺頭 ‧‧若要讓他出現 $i=1 $i=2 $i=3 ,那該如何做呢 這時就需要用到靜態變數static的幫忙 <? function Hmm(){ static $i=0; //將$i設為靜態變數,且static只能用於函數中 $i=$i+1; echo "\$i=$i "; } Hmm(); Hmm(); Hmm(); ?> 執行結果 $i=1 $i=2 $i=3 利用static的功能,將$i值保存於記憶體中 不因為函數跑完了,就被殺頭 ●動態變數 講到這個我就頭大 真的是有夠給他混亂....Orz 不過沒關係,就算用不到,概念也要知道 ^^ 使用方法倒是很簡單 <? $dino = "ken"; //最常用的變數設法 $$dino = "leo"; //看到沒?多了一個$,這就是動態變數 echo "$dino<br>"; //(1)結果ken echo "$$dino<br>"; //(2)結果$ken echo "${$dino}"."<br>"; //(3)結果leo echo $ken . "<br>"; //(4)結果leo echo $$dino . "<br>"; //(5)結果leo ?> (1)原式"$dino";結果ken 沒問題吧...跳過 (2)原式"$$dino";結果$ken 看起來應該要輸出的是leo,怎麼會跑出$ken? 將$$dino拆開來看,其實是長這樣 原式為($)($dino),由於在【雙引號中】將$dino=ken代入 得($)(ken),雙引號跑完嚕,就直接跑出$ken 那,那$ken也是變數嚕?我們來看下面 (3)原式"${$dino}";結果leo 用【大括號】將$dino包住,這變數的結果會是ken 但【雙引號】仍在,於是將$ken視為變數,輸出 所以得leo (4)原式$ken;結果leo 沒啥,拿來證明(3)是對的..XD (5)原式$$dino;結果leo 不加雙引號的情況下,將變數直接讀出來而已 有沒有覺得很頭大呀..=_=...反正整理一下 上例只有2個變數名稱 $dino $ken 1個動態變數名稱 $$dino 以及兩個值 ken leo 證明了寫程式的人,腦筋都要打結外加抽筋 發明程式的人,不曉得是不是經過外星人改造腦部構造..=_= 動態變數也可以用於陣列中 <? $anstd[0]="a"; $anstd[1]="b"; $a=100; $b=200; echo "顯示為".$$anstd[0].'....為什麼?<br>' echo "因為$$anstd[0]=$a"; echo "顯示為".$$anstd[1].'....為什麼?<br>' echo "因為$$anstd[1]=$b<br>"; ?> 結果如下 顯示為1....為什麼? 因為$a=100 顯示為2....為什麼? 因為$b=200 程式碼與結果比對一下,應該就曉得了吧 再來一個試看看 <? $name="A"; $A[0]="good"; $A[1]="bad"; $good="好呀!"; $bad="真爛"; $b="C"; $$b='D' echo $name . '<br>' echo $C . '<br>' echo ${${$name}[0]} . '<br>' echo ${$name}[0]; ?> 顯示結果為 A D 好呀! good x1
|
引用 | 編輯
anstd
2005-11-29 07:18 |
1樓
▲ ▼ |
作者:紅軍©2005-11-29
版權沒有,盜版隨便 ●預設變數 這個就‧‧‧這樣講好了 大家在上網時,常常會碰到網站將你的相關資料列出 比方說什麼瀏覽器,IP,作業系統等等之類的 這些資料通常已經存在於網路通信協定內 所以只需下達一些查詢相關資料的變數即可 echo一下來看看吧 <? echo "使用者IP位址". $_SERVER['REMOTE_ADDR'].'<br>' echo "使用者相關資訊". $_SERVER['HTTP_USER_AGENT']; ?> $_SERVER其中一個預設變數,其他的譬如$_GET,$_POST,$_ENV‧‧等等之類 可以到PHP官方網站查一下 ●變數型態轉換 沒事轉什麼轉?若真的沒事就不會要你轉了呀‧‧‧ 譬如今天要你寫一個東東 我有234張A光,一個盒子最多裝12張 我可以裝滿幾個盒子?? <? $a_cd = 234; $box = $a_cd/12; echo $box; ?> ok,echo出來,我可以裝滿19.5個盒子 什麼叫做19.5個盒子‧‧‧XD!!!,很怪吧 所以給他轉一下資料型態為int <? $a_cd = 234; $box = $a_cd/12; echo (int)$box; //轉成int型態後,強迫變為整數 ?> 可以強迫轉換的有哪些? (1)int | integer (2)bool | boolean (3)float | double | real (4)string (5)array (6)object 這個自己去玩看看,因為很簡單 看你想轉成啥型態就加上(xxx) <==xxx為想轉的型態 接下來要介紹gettype()還有var_dump() 這在幹嘛用的?其實只是拿來問看看某某變數它的型態是瞎米碗膏 <? $a = 11.11; $b = (int)$a; $c = (string)$a; echo "\$a = $a 型態為" . gettype($a) . '<br>' //型態為double<=也是float都是浮點數 echo "\$b = $b 型態為" . gettype($b) . '<br>' //型態為integer echo "\$c = $c 型態為" . gettype($c) . '<br>' //型態為string var_dump($a); //float(11.11) echo '<br>' var_dump($b); //int(11) echo '<br>' var_dump($c); //string(5) "11.11" ?> 第二種轉換型態的方式為settype() 譬如settype($a,string); //將$a轉為浮點數型態 <? $a=123456; settype($a,string); echo "\$a = $a 型態為" . gettype($a); ?> 這種方式除了可轉上一種方式能轉的型態外 也可以轉NULL ●如何讀取外部變數 講了這麼多廢話‧‧好像都沒有瞎米成果 只有echo來echo去的.... ^^" 其實我是覺得,慢慢的一步步來學習 雖然過程長,但是慢工出細活,會比較好 之後碰到問題會比較好解決 會想學PHP無非是想要透過它來完成互動式網業 譬如留言版就是一個很好的例子! 這篇並不會一下子就講到那去,一切由表單開始 ※建議以UTF-8來編,別用Big-5,許功蓋問題 ※有問題先找google吧..真是用PHP寫中文網站的痛=_= 做一個檔名為test1.htm <html> <body> <b>自我介紹<p></b> ●===========================●<p> <form action="test1.php" method="get"> 我的名字 <input type=test name=myname size=20><p> 我性別是<br><input type=radio name=mysex value=1>男<br> <input type=radio name=mysex value=2>女<br> 我家住哪 <input type=test name=myadd size=20><p> 我的簡介<br><textarea rows="5" cols="30" name=myinfo></textarea><p> <input type=submit value="好了"> <input type=reset value="重填"><br> ●===========================● </from> </body> </html> 用瀏覽器打開吧,直接點【好了】 會出現錯誤‧‧廢話,我們form要傳送到test1.php又還沒做 是要你看網址的地方 test1.php?myname=&mysex=&myadd=&myinfo= 看到沒,就是將myname,myadd,myinfo丟到test1.php 所以我們再做一個檔名為test1.php <? //判斷是否有輸入姓名 if($_GET['myname']==""){ echo "我沒名字<p>"; }else{ echo "我的名字叫" . $_GET['myname'] . '<p>' } //判斷是否有點選姓別 if ($_GET['mysex'] == 1) { echo "我是男生<p>"; }elseif ($_GET['mysex'] == 2){ echo "我是女生<p>"; }else{ echo "我沒輸入,所以我是人妖<p>"; } //判斷是否有輸入住哪裡 if($_GET['myadd']==""){ echo "我是無殼蝸牛<p>"; }else{ echo "我家住在" . $_GET['myadd'] . '<p>' } echo "以下是我的簡介<hr>"; //判斷是否有自我介紹 if($_GET['myinfo']==""){ echo "我不想說任何話<hr>"; }else{ echo $_GET['myinfo'] . '<hr>' } ?> 這樣應該知道怎麼使用了吧 ^^" 有空練習做些奇奇怪怪的表單 對於提升寫作能力會有很大的幫助喔 我的PHP學習筆記(2)└變數┘ (end) 版權沒有,盜版隨便..@.@ x0 |