廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3834 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
anstd 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 社區建設獎
頭銜:No bloodNo blood
版主
級別: 版主 該用戶目前不上站
推文 x27 鮮花 x638
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[PHP][討論] 我的PHP學習筆記(2)└變數┘  (版權沒有,盜版隨便)
作者:紅軍©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


[ 此文章被紅軍在2005-11-29 07:21重新編輯 ]



獻花 x1 回到頂端 [樓 主] From:台灣中華電信 | Posted:2005-11-22 16:07 |
anstd 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 社區建設獎
頭銜:No bloodNo blood
版主
級別: 版主 該用戶目前不上站
推文 x27 鮮花 x638
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

作者:紅軍©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)
版權沒有,盜版隨便..@.@


[ 此文章被紅軍在2005-11-29 07:24重新編輯 ]


獻花 x0 回到頂端 [1 樓] From:台灣中華電信 | Posted:2005-11-29 07:18 |
devilchc 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x18
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感謝用心!及慷慨分享喔!


獻花 x0 回到頂端 [2 樓] From:台灣 | Posted:2006-01-27 16:33 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.067274 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言