当前位置:Linux教程 - Php - 让你更清楚PHP

让你更清楚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 来自:奥索网