作者:红军©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