让你更清楚PHP
原作者:施势帆、游裕松
什么是PHP?
PHP=Personal Home Page Tools,于1994年由Rasmus Lerdorf创造,原本用途只是为知道他自己个人置于 Internet上的履历表曾被谁浏览过。
PHP是一个在伺服器端执行的Scripting Language。与ASP类似,其目的则为开发动态式的网页并可与资料库连结。
据估计,于1996年约有15,000个网站使用PHP,至今年1999年年中已有150,000网站使用PHP。
PHP的特性:
免费、轻巧快速 、真正跨平台 。
可支援多种资料库,包括常用的Oracle, mSQL, dBase, Sybase, Informix, MySQL等等。
具备CGI及类似JavaScript在Client端的功能。
语法与C及Perl相近
PHP的线上资源 :
官方网站: http://www.php.net/
线上说明手册:
可在www.php.net 查阅或download说明文件。
在安装完成后,可在PHP的目录底下的子目录../doc中取得,该手册为 html格式,可用浏览器直接浏览。
软体的取得:
可自www.php.net下载。目前最新版本为PHP 4.0 Beta 2 ,本次示范则以现行主流版本PHP 3.0为主。 其原始程式码为php-3.0.12.tar.gz。
安装方式:
背景描述:本次安装系与安装 Apache Web Server同时进行。系统平台为Linux Slackware 3.6。
应备的软体:php-3.0.12.tar.gz --用以安装PHP。
apache_1.3.9.tar.gz --用以安装Apache Web Server,该软体可自www.apache.org下载 。
安装流程:
将apache_1.3.9.tar.gz及php-3.0.12.tar.gz置于 /usr/local目录底下(该目录是一般习惯性的预设位置)并将其解压缩,解压缩完成后,会于/usr/local底下分别产生apache_1.3.9及php-3.0.12等二 个子目录:
gunzip apache_1.3.9.tar.gz
tar xvf apache_1.3.9.tar
gunzip php-3.0.12.tar.gz
tar xvf php-3.0.12.tar
cd apache_1.3.9
将apache的程式目录指向/www:
./configure --prefix=/www
设定PHP的组态:
. cd /usr/local/php-3.0.12
./configure --with-apache=/usr/local/apache_1.3.9 --enable-track-vars
其中:--with-apache...为和apache连结成为apacheh的一个模组。
--enable-track-vars 为启动cookie的get/post等追踪功能。 欲与资料库产生连结,也是在此做config,如 --with-MySQL。
开始安装PHP :
make
make install
设定apache的组态及安装:
cd /usr/local/apache_1.3.9
./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
make
make install
将原始所附的php.ini范本:php.ini-dist cp 至 /usr/local/lib底下
cd /usr/local/php-3.0.12
cp php3.ini-dist /usr/local/lib/php3.ini
编修apache的httpd.conf或srm.conf档:
AddType application/x-httpd-php3 .php3
将php的档案格式的副档名指定为.php3,亦可自行指定,如:.phtml,.php等等。
启动Apache Web Server:
在/www/bin目录底下输入并执行 apachectl start便可启动apache server。
验证是否安装成功:
在Apache的html储存目录 /www/htdocs 底下用vi或joe等文字编辑器编辑一个 .php3档。
例子:<?php echo “Hello World!” ; ?>
php script的开始及结束符号可以有四种方式:
<? echo \"Hello World\" ?>
<?php echo \"Hello World\" ?>
<script language=\"php\">
echo \"Hello World\";
</script>
<% echo \"Hello World\" %>
可能的麻烦:
若在已安装有Apache的系统中,如教材所附的Slackware3.6,再安装PHP时。要做组态设定会比较麻烦。
心得:
如同操作或安装Linux的应用软体一般,安装PHP也须参考许多的说明文件,即使PHP是属比较容易安装的软体。
言
PHP 3 (Hypertext Preprocessor)是一种伺服器端崁入式HTML语言,它的语法大致上与C/C++、Perl、Java相似,只要有简单的程式设计观念便可以轻易的上手,其功能与现今ASP功能类似,可以快速的写出功能强大的网页。PHP3除可以做一般的网页功能外,并提供像一般CGI的使用功能、cookies的功能、档案上传、WWW使用者身分证明、GIF动画(需编辑组态加入GD library)等。
同时PHP3也支援一般Unix系统所使用的资料库,它提供的资料库列表如下:
Adabas D InterBase Solid
dBase mSQL Sybase
Empress MySQL Velocis
FilePro Oracle Unix dbm
Informix PostgreSQL
另外PHP3也提供IMAP, SNMP, NNTP, POP3, HTTP的TCP/IP通讯协定上使用。笔者将利用几期的时间分别来介绍其安装、语法、函式、资料库连结、网页技巧等,或许读者可以先至 http://www.php.net取得最新的软体、资讯和详尽的手册,另外笔者建议可至http://linuxfab.cx/indexForumData.php3?FID=1浏览看看,那有许多相关的讨论。
1. 安装
PHP3可以分别编辑成apache module、fhttpd module、CGI三种形式。
1.1 原始档安装
因为笔者在目前发现PHP4.0 bata1已经公布,故完整安装使用PHP4 bata1安装,应PHP4只有bata版所以并不提供APXS更新及SETUP的方式产生组态安装档,所以必须使用最原始的方式安装,PHP4的组态及使用语法和PHP相同,另外注意PHP4在Apache上组态档设定和自己本身组态档名都以修改,请根据以下步骤安装以免发生问题。
PHP4使用的语法分析器改使用Zend,所以其执行效能比PHP3增强很多,几乎比一般 PHP3、APS快的3~6倍,如读者有兴趣请至http://www.zend.com/观看其比较结果。
下面步骤是针对apache module的PHP4 bata 1原始档快速安装的说明。
Step 1. tar xvfz apache_1.3.6.tar.gz ← 解压缩apache原始档。
Step 2. tar xvf php-4_0b1.tar.tar ← 解压缩php4 bata1原始档。
Step 3. cd apache_1.3.6 ← 切换至apache目录。
Step4. ./configure ← 执行apache组态设定(使用预设组态安装路径为/usr/local/apache)。
Step 5.cd ../php-4.0b1 ← 切换至php4路径。
Step 6 ./configure --with-apache=/root/apache_1.3.6 --enable-track-vars ← 执行php4组态并编辑成apache module型式,--enable-track-vars预设PHP4启动GET/POST/Cookie的功能,如有需要使用其他的参数请使用./configure --help观看其说明。
Step 7. make ← 编辑PHP4。
Step 8. make install ← 安装PHP4。
Step 9 cd ../apache_1.3.6 ←切换回apache目录。
Step10 ./configure --activate-module=src/modules/php4/libphp4.a ← 设定apache组态启动php4的模组。(注意:在apache module php4路径下并不会有libphp4.a这个档案,这是正常的,libphp4.a在之后会被apache 创造出来。)
Step 11. make ← 编辑apache。
Step 12. make install ← 安装apache。
Step 13. 如果需要的话,将执行中的http server停止,并将/usr/local/apache/bin/下的httpd daemon拷贝至原本httpd daemon的路径,将旧的httpd daemon更换成新版,可使用httpd -l检查是否将PHP4编辑进入apache server,再重新启动http server。
Step 14 cd ../php-4.0b1 ← 切换回PHP4路径。
Step 15. cp php3.ini-dist /usr/local/lib/php.ini ← 将php.ini-dist拷贝至/usr/local/lib/php.ini这是PHP4预设的组态设定档预设组态路径,如果要使用其它路径请至Step 6使用以下参数编辑PHP3组态,
--with-config-file-path=/path in step 6
Step 16 编辑 httpd.conf 或 srm.conf 档案,增加下列一行
AddType application/x-httpd-php .php
Step 17. 重新启动apache server。
1.2 RedHat Linux 6.0安装
RedHat 6.0已经将PHP3.0.7安装包含在apache module中了,但是在组态档并没有启动,需编辑以下组态档并重新启动apache。
Setp 1. joe /etc/httpd/conf/httpd.conf
LoadModule php3_module ← 载入php3 module。
modules/libphp3.so ← 设定载入动态module路径及DSO module名称。
AddModule mod_php3.c ← 加入php3 module。
以上的组态已设定完成只需要将#号移除即可。
Setp 2. joe/etc/httpd/conf/srm.conf
AddType application/x-httpd-php3 .php3 ←加入处理php3档案
AddType application/x-httpd-php3-source .phps
以上的组态已设定完成只需要将#号移除即可。
Setp 3. 重新启动apache server,执行 /etc/rc.d/init.d/httpd restart。
1.3 PHP3更新
假如读者的apache一开始就编辑成DSO则可随时利用PHP原始码更新PHP3 apache module,步骤如下:
Setp 1.tar xvfz php-3.10.tar.gz ← 解压缩php3原始档。
Setp 2. cd php-3.0.10 ← 切换至php-3.0.10目录
Setp 3. 组态
./configure --with-apxs=/usr/local/apache/bin/apxs
(设定apache apxs的执行路径和档案名称)
--with-config-file-path=/usr/local/lib
(设定php3之前组态档的路径)
Step 4. make install ← 编辑并安装
2. 测试
我们可以执行下列步骤来测试PHP3是否正确编辑到apache module中。
Setp 1.切换至apache首页的路径(一般设定安装为/usr/local/apache/htdoc,RedHat Linux为/home/httpd/html)
Setp 2. 编辑新档(范例名称为info.php3),编辑内容如下:
<?php
phpinfo(); // phpinfo()为PHP3本身提供系统资讯函式
?>
Step3. 透过浏览器观看结果,如图一所示:
图一
3. PHP3组态档说明
PHP3的组态档档名为php3.ini,其预设路径为/usr/local/lib,若RedHat Linux系统则路径为/etc/httpd/,如果要使用其它的组态档路径或是使用旧的PHP3组态,只要在编辑PHP3时加入下面参数即可--with-config-file-path=DIR,其中DIR为使用路径。
PHP3.ini这个档案是当PHP3语法分析器启动时就会根据其设定来启动PHP3语法分析器,如果PHP3是编译成伺服器模组的话,这个档案会于伺服器启动一起启动,但是如果是编辑成CGI的形式,则这个档案会于每次执行CGI就读取此设定。
PHP3组态设定主要分为以下六大部分︰
1. 一般的PHP3组态设定。
2. Mail的组态设定。
3. PHP3安全模式的组态设定。
4. PHP3除错的组态设定。
5. 扩展性的载入设定。
6. 资料库的组态设定。
我们可以自己编辑一个PHP3的档案,在档案中呼叫其info()的函数,并输出在浏览器上,这样就可以从远端得知自己的PHP3的组态设定状态。
一般的PHP3组态设定说明︰(较重要的几项说明)
1.display_errors=on (on/off)
设定是否将PHP3语法分析器所检查出的错误,显示于HTML档上。
2. engine=on (on/off)
设定是否启动PHP3语法分析器,只有当PHP3编辑成apache模组时,这个指令可以根据不同的路径、虚拟主机路径在apache组态档设定成(on/off)。
3.error_reporting=7
设定PHP3语法错误的等级,其设定值为整数值,数值意义如下︰
数值 数值意义
1 普通错误
2 普通警告
4 语法错误
8 警要性关联性错误
系统预设值为7,就是显示普通错误、普通警告和语法错误。
4.max_execution_time=30
设定每个PHP3程式所能执行的最大时间,预设为30秒。
5. memory_limit= 8388608
设定每个PHP3程式所能使用的最大记忆体大小,预设为8388608也就是8MB。
6. precision =14
设定浮点数其有效位数为几位数。
7.upload_max_filesize = 2097152
设定最大上传档案大小。
8.include_path =
额外设定PHP3的include档路径。
9.safe_mode boolean(on/off)
设定PHP3是否可以启动成为安全模式。
10.sendmail_path
设定sendmail程式的路径。
11.track_vars boolean(on/off)
设定是否使用track_var的功能, $HTTP_GET_VARS, $HTTP_POST_VARS and $HTTP_COOKIE_VARS
12.log_errors (on/off)
是否记录执行错误的PHP3程式错误。
5 使用简介
我们可以使用下列方法在HTML档中执行PHP3的指令:(copy from http://www.php.net/manual/html/language.basic-syntax.html)
1. <? echo (\"this is the simplest, an SGML processing instructionn\"); ?>
2. <?php echo(\"if you want to serve XML documents, do like thisn\"); ?>
3. <script language=\"php\">
echo (\"some editors (like FrontPage) don\t
like processing instructions\");
</script>
4. <% echo (\"You may optionally use ASP-style tags\"); %>
<%= $variable; # This is a shortcut for \"<%echo ..\" %>
其中笔者比较建议使用第二种方式,简单清楚,或许稍有程式设计的读者可以先看一下http://www.php.net/docs.php3,十分容易的。接下来笔者使用以下范例来说明PHP3 date函数的用法︰
<CENTER>One 3.0.10 script</CENTER>
<? php
$today = date(\"Y-m-d\");
$time = date(\"H:i:s\");
PRINT \"<CENTER>Today is: $today</CENTER>\";
PRINT \"<CENTER>Now TIME is: $time</CENTER>\";
?>
执行的结果如图二所示:
图二
而此时可以检视输出的HTML档,如图三所示:
图三
从上面范例我们不难发现使用PHP3所写的部分并不会显示在一般网页原始程式上,这项就可有效保障自身网路程式的智慧财产权。
6. 语法说明
6.1程式注解方式
PHP3提供程式的注解方式有C、C++和Unix shell三种方式,范例如下:
<?php
echo \"This is a test\"; // This is a one-line c++ style comment ← 这是C++所使用的注解方式,就是使用//后面加上你要的注解文字, // 使用//注解方式其有效范围为到该行结束为止。
/* This is a multi line comment
yet another line of comment */ ← 这是C所使用的注解方式,也就是使用/*后面加上你要的注解文字,注解结束并加上*/,让程式了解注解结束。另外使用/*需注意在注解符号后不可有空白。
echo \"This is yet another test\";
echo \"One Final Test\"; # This is shell-style style comment
?>
井字号这是一般Unix shell注解的使用方法,使用时需注意#的有效范围为一行,如要多行注解则要在每行注解开头加上井字号。
6.2 资料类型
PHP提供以下的形态:
1. Integers 整数
2. Floating point numbers 浮点数
3. Strings 字串
4. Arrays 矩阵
5. Objects 物件
6.2.1 Integers 整数
整数的类型可以使用10、8或是16进制的数字表示法,例如36可以使用以下方式表达︰
$a = 36; # 10进制
$a = 044; # 8进制
$a = 0x24; # 16进制
$a=-36 ;# 负整数
凡是以0开头的常数会被compiler 视为8进制,而以0x开头的常数视为16进制。
6.2.2 Floating point numbers 浮点数
浮点数有以下两种类型,浮点数在PHP3下视为double的型别。
$a = 1.234;
$a = 1.2e3;
以上两种都是浮点数1.234的表示法,e的浮点数表示法是一般工程上常使用的表示方法。
6.2.3 Strings 字串
字串有以两种使用方式,第一种表示方法为将字串放于一对双引号之间,变数在双引号之间将被扩充(但主要还是受到语法分析器限制),在一般C、Perl语言中有定义一些特殊的反斜线字元(“/”),以使用在一般特殊的场所或用途,其符号说明如下︰
符号 说明
n 换行 New line
r carriage
t Tab键
\\ 显示
$ 显示$
” 显示”
使用特殊字元,你可以从其他字元跳脱,但是注意这样产生的错误可能会造成高于语法错误的错误等级。第二种字串使用方法是限定字串使用单引号(‘ ‘),字元将不能使用任何变数的延伸和使用反斜线。PHP3在处理字串除了”\\”和””外,你可以使用反斜线(“/”)单引号(‘)和双引号(“)。
当字串要被使用成数字时,它的结果数值和类型是借由以下决定,当字串转换为数值时,如果字串中有英文字母的e、E和小数点时,PHP3会自动将字串定为double。
$foo = 1 + \"10.5\"; // $foo is double (11.5)
$foo = 1 + \"-1.3e3\"; // $foo is double (-1299)
$foo = 1 + \"bob-1.3e3\"; // $foo is integer (1)
$foo = 1 + \"bob3\"; // $foo is integer (1)
$foo = 1 + \"10 Small Pigs\"; // $foo is integer (11)
$foo = 1 + \"10 Little Piggies\"; // $foo is integer (11)
$foo = \"10.0 pigs \" + 1; // $foo is integer (11)
$foo = \"10.0 pigs \" + 1.0; // $foo is double (11)
6.2.4 矩阵
单一矩阵︰
PHP提供阶梯状和关联性矩阵,事实上这两种并没有不同,你可以制造一个矩阵并使用list() or array() functions,如此你将可以设定矩阵中的每一个元素。
$a[0] = \"abc\";
$a[1] = \"def\";
$b[\"foo\"] = 13;
也可以在所设定矩阵后面加上出始值︰
$a[] = \"hello\"; // $a[2] == \"hello\"
$a[] = \"world\"; // $a[3] == \"world\"
矩阵可以储存藉着使用以下的函数asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), and uksort()。
多维矩阵可以藉着以下的方式产生︰
$a[1][0] = $f; # 二维矩阵
$a[\"foo\"][4][\"bar\"][0] = $f; # 四维矩阵
举例如下︰
# Example 1:
$a[\"color\"] = \"red\";
$a[\"taste\"] = \"sweet\";
$a[\"shape\"] = \"round\";
$a[\"name\"] = \"apple\";
$a[3] = 4;
# Example 2:
$a = array(
\"color\" => \"red\",
\"taste\" => \"sweet\",
\"shape\" => \"round\",
\"name\" => \"apple\",
3 => 4
);
array() 可以被使用在多为矩阵中。
<?
$a = array(
\"apple\" => array(
\"color\" => \"red\",
\"taste\" => \"sweet\",
\"shape\" => \"round\"
),
\"orange\" => array(
\"color\" => \"orange\",
\"taste\" => \"sweet\",
\"shape\" => \"round\"
),
\"banana\" => array(
\"color\" => \"yellow\",
\"taste\" => \"paste-y\",
\"shape\" => \"banana-shaped\"
)
);
echo $a[\"apple\"][\"taste\"]; # will output \"sweet\"
?>
6.2.5 物件
起始化一个物件,必须使用新的叙述才能将物件提供给变数使用,举例如下︰
class foo {
function do_foo () {
echo \"Doing foo.\";
}
}
$bar = new foo;
$bar -> do_foo ();
6.2.6 改变类型
PHP3并不需要或者说是并不提供额外类型让使用者去定义变数,变数本身的类型定义是借由变数的本身的类型来自行决定,也就是说假如$a是字串,则$a就是字串类型,如果$a=10,则$a此时的类型为整数。举例使用+来测试PHP3的自动类型转换,如果变数是整数结果就是整数,字串结果也就成为字串。如果你真的要订定变数类型,请观看以下说明变更类型。
$foo = \"0\"; // $foo is string (ASCII 48)
$foo++; // $foo is the string \"1\" (ASCII 49)
$foo += 1; // $foo is now an integer (2)
$foo = $foo + 1.3; // $foo is now a double (3.3)
$foo = 5 + \"10 Little Piggies\"; // $foo is integer (15)
$foo = 5 + \"10 Small Pigs\"; // $foo is integer (15)
自行设定变数类型方法和C有点类似,只要在变数之前加上( ),( )中加入所要设定的类型即可,举例如下︰
$foo = 10; // $foo is an integer
$bar = (double) $foo; // $bar is a double
自订类型的型态允许下面几种方式︰
(int), (integer) - cast to integer
(real), (double), (float) - cast to double
(string) - cast to string
(array) - cast to array
(object) - cast to object
注意︰在( )设定类型中可以使用空白加上类型名称,举例如下︰
$foo = (int) $bar;
$foo = ( int ) $bar;
6.3 变数范围
任何变数在PHP3函数中都预设为区域变数,例如︰
$a = 1; // 这时候变数a在整个程式中的值,永远为1,也就是$a为整体性变数。
Function Test () {
echo $a; // 因为$a被呼叫使用于函数中,所以$a此时为区域变数。
}
Test ();
这个程式执行会出现Warning: Uninitialized variable or array index or property (a),这样的错次讯息因为在echo这但叙述中$a为区域变数,它并未给$a设定值,所以输出时会产生错误。你必须注意在PHP3变数的范围有一点点不同于C,在C语言在上面的范例区域变数值会自动设定为1,除非在Function中宣告$a global 变数,在PHP3设定整体变数再函数使用必须向下面范例一样设定︰
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;
则上面输出的结果等于3,因为在Function中加入global使得变数a,b将归类成为整体性变数。在这个Function并没有限制只能有多少个变数可以设定为区域性变数。第二种方法允许Function使用设定整体性变数的方式,是使用PHP3整体性矩阵($GLOBALS)来定义整体性变数。上面的范例也可以书写成以下的方式。
$a = 1;
$b = 2;
Function Sum () {
$GLOBALS[\"b\"] = $GLOBALS[\"a\"] + $GLOBALS[\"b\"];
}
Sum ();
echo $b;
这个$GLOBALS矩阵是一个关联性矩阵,它的矩阵元素内容是和输入的内容有关联。其他几个重要的变数区域特点是静态变数,静态变数是只有存在于Function之中,但是它并不会遗弃它的值当程式执行结束并跳出Function,它的值还是不变。利用以下的范例思考一下静态变数在PHP3的意义。
Function Test () {
$a = 0;
echo $a;
$a++;
}
上面是一个没有作用的程式。
6.4 设定变数
变数在一般PHP3是使用和设定成动态的数值,一般变数的语法使用语法如下︰
$a=”hello”;
设定$a是各字串变数,同时$a的值为hello。如何在一般变数设定中在设定变数呢?设定的方法如下,就是设定变数完之后,再加上设定变数的符号$,这样就设定成双层变数,举例如下︰
$a = \"hello\";
$$a = \"world\";
这个时候PHP3会将$$a的第一次变数设定为hello,再将$$a设定为$hello。上面的例题变数a=hello,变数变数a也就是变数hello的内容是world,因此上述内容等于以下表示法︰
echo \"$a ${$a}\"; // 它正确的输出结果也和以下结果相同︰
echo \"$a $hello\";
上述的范例输出为hello world.。
6.4.1 PHP从HTML中取得变数值
当一个表单由使用只送出,PHP将自动产生一个变数,同时变数值为所设表单所送出的值。详细考虑以下范例︰
<form action=\"foo.php3\" method=\"post\">
Name: <input type=\"text\" name=\"name\"><br>
<input type=\"submit\">
</form>
当submitted PHP将自动产生一个$name,而$name的值就是我们输入的值。使用矩阵得到外在变数,只能使用单为矩阵方式,范例如下︰
<form action=\"array.php\" method=\"post\">
Name: <input type=\"text\" name=\"personal[name]\"><br>
Email: <input type=\"text\" name=\"personal[email]\"><br>
Beer: <br>
<select multiple name=\"beer[]\">
<option value=\"warthog\">Warthog
<option value=\"guinness\">Guinness
</select>
<input type=\"submit\">
</form>
假如在安装 PHP有安装track_vars并予组态档设定这个功能时,则可以经由POST or GET得到变数并可配合PHP提供的矩阵$HTTP_POST_VARS 、$HTTP_GET_VARS来使用。
当我们要使用图形的submit button只要类似底下的方法就行了︰
<input type=image src=\"image.gif\" name=\"sub\">
6.5 环境变数
PHP可以将环境变数当成一般PHP的变数,举例如下︰
echo $HOME; //假如有设定系统家目录变数,则会输出变数内容。
如何得知变数的类型,可以使用PHP提供的函数得知,函数提供如下,gettype(), is_long(),
is_double(), is_string(), is_array(), and is_object()。
6.6 算术式
算术式是PHP相当重要的基本的功能之一,算术的运算对象是资料,算术式是将算术与资料、变数、函数做合法用算。运算符号说明︰
符号 名称
$a+$b 加
$a-$b 减
$a*$b 乘
$a/$b 除
$a%$b 余数
范例︰
$a=10;
$b=3;
$c=$a%$b;
echo $c // 此时输出为1。
字串连结符号︰字串连结符号,只有一种就是使用小数点加以连结两个字串,举例如下︰
$a = \"Hello \";
$b = $a . \"World!\";
print $b; // 则显示字串HelloWorld。
指定符号︰(=)
基本的指定符号为等号(=),你必须承认它是一个相等的符号,等号的意义是将右边的值设定到等号左边。
范例︰
$a = ($b = 4) + 5; // a的值为9,因为变数b被设定为4。
我们可以立刻使用指定符号来完成综合运算,例如字串结合、算数运算等等….举例如下︰
$a = 3;
$a += 5; //此时$a=8
$b = \"Hello \";
$b .= \"There!\"; //设定$b为\"Hello There!\",它等于以下叙述
$b = $b . \"There!\"
Bitwise Operators可以让你去设定每一个bit是(0或1)。
Bitwise Operators 说明表格如下︰
符号 名称 结果
$a & $b And 将a和b对应的位元作AND
$a | $b Or 将a和b对应的位元作OR
~ $a Not 将a的每一个位元作NOT
$a << $b 左移 将a的位元左移b个bit(其意义为x2)
$a >> $b 右移 将a的位元右移b个bit (其意义为 /2)
范例︰
$a=10;
$b=4;
$c=$a&$b;
print $c; // 输出为0
逻辑运算(Logical Operators)︰
符号 名称 结果
$a and $b And 对a和b做逻辑And
$a or $b Or 对a和b做逻辑Or
$a xor $b Xor 对a和b做逻辑Xor
! $a Not 对a做逻辑Not
$a && $b And 对a和b做逻辑And
$a || $b Or 对a和b做逻辑Or
上面and和&&,or和||意义逻辑意义是相同,但其拥有不同的优先权。
范例︰将上述范例的$c修改成,$c=$a xor $b 其输出为10。
比较符号︰
比较无号的意义是你能将两个值加以比较,其运算结果传回ture(1)、not ture(0)。
符号 名称 结果
$a == $b 相等 比较a是否等于b
$a != $b 不等 比较a是否不等于b
$a < $b 小于 比较a是否小于b
$a > $b 大于 比较a是否大于b
$a <= $b 小于等于 比较a是否小于等于b
$a >= $b 大于等于 比较a是否大于等于b
另外PHP也提供和C语言相同的条件符号?,其使用格式如下︰
符号 范例 说明
?︰ a?b︰c 若a为真,则取b,否则则取c
运算符号的优先顺序︰
运算符号的优先顺序决定两个运算式,该如何一起工作︰Examlpe 1 + 5 * 3 大家都知道答案为16并不是18,因为*的运算优先权大于+号,这样大家明白优先权的重要性了吧。请观看PHP手册的运算符号优先权列表。
6.8 PHP流程控制
6.8.1 条件控制
if 语法︰
if (条件式)
{叙述}
范例︰
if ($a > $b)
print \"a is bigger than b\";
当$a>$b则显示a is bigger than b。
也可以配合else和else if 来加强if的功能,举类如下︰
if ($a > $b) {
print \"a is bigger than b\";
}
elseif ($a == $b) {
print \"a is equal to b\";
}
else {
print \"a is smaller than b\";
}
以上范例就是利用if写成一个判定两数>、<、= 的比较式子。
PHP例外提供另一种if 的语法,你可以选择要使用哪一种方式来书写,这个方式和HTML的if是相同的,举例如下︰
if ($a == 5):
print \"a equals 5\";
print \"...\";
elseif ($a == 6):
print \"a equals 6\";
print \"!!!\";
else:
print \"a is neither 5 nor 6\";
endif;
switch 是多重判断的流程控制指令,它的书写方式较if-else简单,举例如下︰
switch ($i) {
case 0:
print \"i equals 0\";
break;
case 1:
print \"i equals 1\";
break;
case 2:
print \"i equals 2\";
break;
default:
print \"i is not equal to 0, 1 or 2\";
}
6.8.2 回圈控制
while是最简单的回圈,基本的while语法如下︰
while (条件式)
{叙述}
其动作方式为当符合条件式的条件,则进行动作否则就跳过while回圈的动作。范例如下︰
/* example 1 */
$i = 1;
while ($i <= 10) {
print $i++;
}
/* example 2 */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
这两个范例都是将1~10显示出来。
do..while是相似于while回圈,其基本动作方式如下︰
do{动作}
while(条件式)
do..while是先动作然后在检查条件式条件,直到不符合条件才跳出回圈,范例如下︰
do {
if ($i < 5) {
print \"i is not big enough\";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print \"i is ok\";
...process i...
} while(0);
for是PHP最复杂的回圈,它基本的语法如下︰
for (expr1; expr2; expr3)叙述
expr1是for回圈起始值设定,只有在第一次执行才会被执行。
expr2 是for回圈条件判断式,条件为真则执行叙述。
expr3 当for回圈执行完expr2的叙述时,将值都到指加以运算,举例如下︰
/* example 1 */
for ($i = 1; $i <= 10; $i++) {
print $i;
}
此范例输出1~10的值。
break指令是可以从正在执行的回圈中跳出,范例如下︰
$i = 0;
while ($i < 10) {
if ($arr[$i] == \"stop\") {
break;
}
$i++;
}
continue 被使用在一回圈结构之中,它可以跳到回圈其他部分并加以执行回圈,或重复回圈运作等等的功能,continue范例如下︰
while (list($key,$value) = each($arr)) {
if ($key % 2) { // 重设定的数字中跳脱
continue;
}
do_something_odd ($value);
}
6.9 require
require就和C语言中的箝制处理#include相同,但结束叙述必须加上;,举例如下︰
require \header.inc\;
6.10 return
数值可以返回使用return的语法将数值return,任何类型都可以return包含lists、 objects,举例如下︰.
function square ($num) {
return $num * $num;
}
echo square (4); // outputs \16\.
发布人:netbull 来自:奥索网