PHP2 语法结构

PHP2:语法结构

数值与字符串

整数,实数,字符串

PHP浮点数的取值范围和C语言的DOUBLE双精相同,如果浮点数不到10E16,而且没有小数部分,则显示时会按整型的样子显示出来。这时要注意,它的内部是浮点型而不是整型。

小数表示法:888.8

字符串:单引号串,双引号串,反引号串,转移字符(""双引号,""反斜线,"n换行,"tTAB

echo "path=$PATH";   这时候会输出当前文件的路径即环境变量

echo 'path=$PATH';    这时候会输也这个字符串

反引号:引号内得是命令

常量和变量

系统常量:

__FILE__这个默认常量是 PHP 程序文件名。若引用文件 (include require)则在引用文件内的该常量为引用文件名,而不是引用它的文件名。

__LINE__这个默认常量是 PHP 程序行数。若引用文件 (include require)则在引用文件内的该常量为引用文件的行,而不是引用它的文件行。

PHP_VERSION这个内建常量是 PHP 程序的版本,如 '3.0.8-dev'

PHP_OS这个内建常量指执行 PHP 解析器的操作系统名称,如 'Linux'

TRUE这个常量就是真值 (true)

FALSE这个常量就是伪值 (false)

E_ERROR这个常量指到最近的错误处。

E_WARNING这个常量指到最近的警告处。

E_PARSE本常式为解析语法有潜在问题处。

E_NOTICE这个常式为发生不寻常但不一定是错误处。例如存取一个不存在的变量。

这些 E_ 开头形式的常量,可以参考 error_reporting() 函数,有更多的相关说明。

当然在程序写作时,以上的默认常量是不够用。define() 的功能可以让我们自行定义所需要的常量。见下例

<?php

define("COPYRIGHT", "Copyright &copy; 2000, netleader.126.com");

echo COPYRIGHT; 

?>

.....

自定义常量:

define("definename","VALUE");

变量类型:

interger,duble,string,array,object,boolean(1true,0false)

变量使用:

严格区分大小写

局部变量,局域于函数内。

全局变量,作用于主程序。

$GLOBALS数组与global声明

函数里面要使用全局变量的时候要用global来声明。例:

function myfunc(){

global $PHP_SELF;

echo $PHP_SELF;

}

myfunc();

注意:PHP函数是不区分大小写的

静态变量:

static $mystr;

$mystr="hello";

echo $mystr;

变量的变量:

a="hello";

$$a="world";

echo "$a,$hello"; //hello,world

echo "$a,${$a}"; //hello,world

隐式类型转换

$a[0]=123;

$a[1]=234;

echo $a;    //显示Array

$b="123abc";

echo $b+1; //显示124

echo $b."123"; //显示123abc123

$a=12345678901234;

$b=12345678901234;

$c=$a+$b;

$d=“123abc”;

echo $c;   //24691357802468

echo (int)$c;  //-2147483648

echo(int)$d; //123

运算符

算术运算符

例子

名称

结果

 

-$a

取反

$a 的负值。

 
 

$a + $b

加法

$a 和 $b 的和。

 

$a - $b

减法

$a 和 $b 的差。

 

$a * $b

乘法

$a 和 $b 的积。

 

$a / $b

除法

$a 除以 $b 的商。

 

$a % $b

取模

$a 除以 $b 的余数。

位运算符

例子

名称

结果

 

$a & $b

And(按位与)

将把 $a 和 $b 中都为 1 的位设为 1。

 
 

$a | $b

Or(按位或)

将把 $a 或者 $b 中为 1 的位设为 1。

 

$a ^ $b

Xor(按位异或)

将把 $a 和 $b 中不同的位设为 1。

 

~ $a

Not(按位非)

将 $a 中为 0 的位设为 1,反之亦然。

 

$a << $b

Shift left(左移)

将 $a 中的位向左移动 $b 次(每一次移动都表示乘以 2)。

 

$a >> $b

Shift right(右移)

将 $a 中的位向右移动 $b 次(每一次移动都表示除以 2)。

比较运算符

例子

名称

结果

 

$a == $b

等于

TRUE,如果 $a 等于 $b。

 
 

$a === $b

全等

TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)

 

$a != $b

不等

TRUE,如果 $a 不等于 $b。

 

$a <> $b

不等

TRUE,如果 $a 不等于 $b。

 

$a !== $b

非全等

TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)

 

$a < $b

小与

TRUE,如果 $a 严格小于 $b。

 

$a > $b

大于

TRUE,如果 $a 严格 $b。

 

$a <= $b

小于等于

TRUE,如果 $a 小于或者等于 $b。

递增/递减运算符

例子

名称

效果

 

++$a

前加

$a 的值加一,然后返回 $a。

 
 

$a++

后加

返回 $a,然后将 $a 的值加一。

 

--$a

前减

$a 的值减一, 然后返回 $a。

 

$a--

后减

返回 $a,然后将 $a 的值减一。

逻辑运算符

例子

名称

结果

 

$a and $b

And(逻辑与)

TRUE,如果 $a 与 $b 都为 TRUE。

 
 

$a or $b

Or(逻辑或)

TRUE,如果 $a 或 $b 任一为 TRUE。

 

$a xor $b

Xor(逻辑异或)

TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。

 

! $a

Not(逻辑非)

TRUE,如果 $a 不为 TRUE。

 

$a && $b

And(逻辑与)

TRUE,如果 $a 与 $b 都为 TRUE。

 

$a || $b

Or(逻辑或)

TRUE,如果 $a 或 $b 任一为 TRUE。

居然有2种写法,如果你使用C/C++,C#,Java等语言的话,就用“&&"”||"吧。如果你是VB的话,就用and,和or。当然你也可以2种都用。它们有什么区别呢?优先级的不同而已。”&&“"||"”and“”or“优先级要高。

数组运算符

例子

名称

结果

 

$a + $b

联合

$a 和 $b 的联合。

 
 

$a == $b

相等

如果 $a 和 $b 具有相同的键/值对则为 TRUE。

 

$a === $b

全等

如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。

 

$a != $b

不等

如果 $a 不等于 $b 则为 TRUE。

 

$a <> $b

不等

如果 $a 不等于 $b 则为 TRUE。

 

$a !== $b

不全等

如果 $a 不全等于 $b 则为 TRUE。

其它几种运算符

·首先看看位运算里的左移(<<)或右移(>>),其实没有什么不同,只是符号不一样而已。

·看看比较运算法里的=====”,这两个比较有意思,它们有什么区别呢?

 1 <?php
 2 var_dump(0 == "a"); // 0 == 0 -> truePHP里,如果整型和字符串比较时,字符串会自动的转化为数值
 3 var_dump("1" == "01"); // 1 == 1 -> true
 4 
 
5 switch ("a") {
 6 case 0:
 7    echo "0";
 8    break;
 9 case "a": // never reached because "a" is already matched with 0
10    echo "a";
11    break;
12 }

字符串转化为数值的原则是什么?

1)如果包括“.”“e”“E”其中任何一个字符的话,字符串被当作 float来求值。否则就被当作整数。

 2)该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。

===3个等于符号,它表示不仅最后转化的数值相等,而且类型也应该相等。

赋值运算符

<?php
 
$a='hello'; //$ahello
 $a+=1;      //$a1,二元赋值符
 $b='world';
 
$c='hello';
 
$c.=$b;//$c"hello world"
?>

错误执行运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉

如果激活了 track_errors特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg 中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。

例如:

<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
   
die ("Failed opening file: error was '$php_errormsg'");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?> 

执行运算符

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec()相同。反引号位于键盘的”~“键那里。

例如:

1 <?php
2  $out=`dir c:`;
3  echo '<pre>'.$out.'</pre>';
4 ?>

结果为:

 Volume in drive C has no label.
 Volume Serial 
Number is A019-7D77

 Directory of C:"

.....

递增/递减运算符

: 递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是 1

例子

名称

效果

++$a

前加

$a 的值加一,然后返回 $a

$a++

后加

返回 $a,然后将 $a 的值加一。

--$a

前减

$a 的值减一,然后返回 $a

$a--

后减

返回 $a,然后将 $a 的值减

类型运算符

PHP 有一个类型运算符:instanceof。instanceof 用来测定一个给定的对象是否来自指定的对象类。instanceof 运算符是 PHP 5 引进的。在此之前用 is_a(),但是 is_a() 已经过时了,最好用 instanceof。

C#里是is,而Java是instanceof,和PHP一样。

例如:

 1 <?php
 2 class A { }
 3 class B { }
 4 
 
5 $thing new A;
 6 
 
7 if ($thing instanceof A) {
 8     echo 'A';
 9 }
10 if ($thing instanceof B) {
11     echo 'B';
12 }
13 ?>

字符运算符

有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。

数组

PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树。
Array的用法

新建一个Array对象,由于Array是key和value映射的。所以Array支持一定数量以分号分隔的值对。

<?php
$arr = array("Hello" => "Word", 12 => true);
echo $arr["Hello"]; // bar
echo $arr[12];    // 1
?> 

请记key 可以是整型或者字符串。如果键名是一个整型的标准表达方法,取整,如果是float型,转化为整型。与之对比,值则可以为任何值。
如果你想实现多维数组如下代码:

<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
echo $arr["somearray"][6];    // 5
echo $arr["somearray"][13];  // 9
echo $arr["somearray"]["a"];  // 42
?> 

新建或删除一个数组对象代码:

 1 ?php
 2 $arr = array(5 => 1, 12 => 2);
 3 $arr[] = 56;    // 相当于 $arr[13] = 56;
 4                 //因为第二个元素的键是12       
 5 $arr["x"] = 42; // 创建一个新元素,且键为字符串
 6                 //"x",值位42.
 7 unset($arr[5]); //删除键位5的元素。
 8 unset($arr);    // 删除整个数组
 9                 //unset()是一函数,从字面的意思上                      
                   //看也知道是撤销设置
10 ?>

语句

三元条件运算符即:$first ? $second : $third

条件

if..else

if (expr) {

 statement

}

范例:本例省略大括号。

<?php

if (date("D") == "Sat") echo "周末了,狂欢去";

?>

范例:本例的执行部分有三行,不可省略大括号。

<?php

if (file_exists("/usr/local/lib/php3.ini")) {

 echo "以下是 PHP3 的配置文件<p><pre>"n";

 readfile("/usr/local/lib/php3.ini");

 echo "</pre>"n";

}

?>

if (expr) {

 statement1

} else {

 statement2

}

直接看下面的例子

<?php

if ($a > $b) {

 echo "a b ";

} elseif ($a == $b) {

 echo "a 等于 b";

} else {

 echo "a b ";

}

?>

switch

switch (expr) {

 case expr1:

    statement1;

    break;

 case expr2:

    statement2;

    break;

    :

 default:

    statementN;

    break;

}

<?php

switch (date("D")) {

 case "Mon":

    echo "今天星期一";

    break;

 case "Tue":

    echo "今天星期二";

    break;

 case "Fri":

    echo "今天星期五";

    break;

 default:

    echo "今天放假";

    break;

}

?>

循环

do..while 循环

while (expr) {

 statement

}

<?php

$i = 1;

while ($i <= 10) {

 print $i++;

 echo ". 以后不敢了<br>"n";

}

?>

while 可以不用大括号来包住执行部分,而使用冒号加上 endwhile。见下例

<?php

$i = 1;

while ($i <= 10):

 print $i++;

 echo ". 以后不敢了<br>"n";

endwhile;

?>

for 循环

for (expr1; expr2; expr3) {

 statement

}

<?php

for ($i=1; $i<=10; $i++) {

 echo "$i. 以后不敢了<br>"n";

}

?>

foreach

foreach (array_expression as $value)

    statement

foreach (array_expression as $key => $value)

    statement

 第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将   会得到下一个单元)。

 第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

其它的流程控制

break 用来跳出目前执行的循环,如下例

<?php

$i = 0;

while ($i < 10) {

 if ($arr[$i] == "stop") {

    break;

 }

 $i++;

}

?>

continue 立即停止目前执行循环,并回到循环的条件判断处,见下例

<?php

while (list($key,$value) = each($arr)) {

 if ($key % 2) { // 略过偶数

    continue;

 }

 do_something_odd ($value);

}

?>

函数和对象

函数简介:

分为系统函数和用户函数。

PHP中的函数FUNCTION包括有返回值的及无返回值。PHP中函数不区分大小写。

函数原型:

返回类型函数名称(类型参数1,类型参数2.....;

系统函数:

abs(number):取绝对值

sin,cos,log,log10,exp,pow,pi

srand(int):随机数种子

int rand([int min],[int max]):取得随机数值

....

字符串函数:

strtolower(string str):转小写

strtoupper(string str):转大写

trim(string str):删除左右空格

substr(string string,int start,int [length]):STRING中取定长字符串

strlen(string str):返回INT类型,取字符串的长度

strpos(string 母串,string 待查字符,int [offset]):寻找字符串中某字符最先出现处

strcmp(string str1,string str2):字符串比较

nl2br(string str):实用HTML格式化

查找字符串的位置可以使用strpos()以及strrpos().

替换的话,调用str_replace()以及substr_replace().

....

加密函数:

md5(string str):返回一个MD5加密的字符串

文件系统函数:

filesize(string filename):获取文件的大小

feof(int fp):是不是到文件尾部

fopen(string filename,string mode):打开文件或者URL

fclose(int fp):关闭已打开的文件

fread()

.....

网络函数:

fsockopen(string hostname,int port,int [error],string p[errorstr],int [timeout]):打开网络的socket链接,取远程文件的内容

gethostbyname(string hostname):DNS查询,返回IP地址

....

MYSQL数据库函数:

mysql_connect(string [hostname] [:port],string [username],string [pwd]):mysql服务器链接

.....

用户函数

声明函数:

function myfunc($arg_1,$arg_2,......)

{

....

return $retval;

}

调用:myfunc(参数列表)

参数的值,通常使用传值方式输入,也可以使用传址的方式,传入参数的指针。方法就是在参数的前面加上&符号即可。

变量的作用域:函数作用域和页面作用域(global声明即可)

函数的嵌套和递归:一个函数调用另一个函数,函数调用自己(注意死循环)

参数默认值:可以给参数指定默认值。

例:

function myfunc($a,$b,$c="默认值"){

echo ...

}

myfunc(3,4);

myfunc(1,2,"不用默认值 ");

条件函数的例子:

 1 <?php
 2  $isRequired=true;
 3  if($isRequired)
 4   {
 
5       function func($op1,$op2)
 6        {
 
7             return $op1+$op2;
 8       }
 
9   }
10   if($isRequired)
11      echo "func(1,3)=".func(1,3);
12    
13    function helloWorld()
14    {
15         return "Hello,world";
16    }
17     echo '<br>Call function helloWorld():'.helloWorld();
18 ?>

输出结果为:

func(1,3)=4
Call 
function helloWorld():Hello,world

函数中的函数:

 1 <?php
 2 function func()
 3 {
 4   function subfunc()
 5   {
 6    echo "I don't exist until func() is called."n";
 7    echo "I have alrady made ";
 8   }
 9 }
10 
11 /* We can't call subfunc() yet
12    since it doesn't exist. */
13 
14 func();
15 
16 /* Now we can call subfunc(),
17    func()'s processesing has
18    made it accessable. */
19 
20 subfunc();
21 
22 ?> 

 输出结果是:

I don't exist until func() is called. I have alrady made

对象

PHP 只有类别 (class)、方法 (method)、属性、以及单一继承 (extensions) 等。

程序中的 $this 类变量也和 $GLOBALS $php_errormsg 两个变量一样,在 PHP 中属于特殊的变量。$this 变量只用在类类别中,表示类的本身。

<?php

// 程序名: cart.inc

class Cart {

 var $items; // 手推车类

 // 本方法加入 $num 件物品到手推车中 (加到 $artnr 变量)

 function add_item ($artnr, $num) {

    $this->items[$artnr] += $num;

 }

 // 本方法从手推车减少 $num 件物品 ( $artnr 变量减掉)

 function remove_item ($artnr, $num) {

    if ($this->items[$artnr] > $num) {

      $this->items[$artnr] -= $num;

      return true;

    } else {

      return false;

    }  

 }

}

?>

要使用手推车可以用类似下例的方式。可以先将每个类存成 Include 文件,再将它 require include 进来。在定义变量 $cart 时,要使用 new 的保留字,表示 $cart 使用 Cart 类。使用 -> 符号,表示执行类的方法。

<?php

require("cart.inc");

$cart = new Cart;

$cart->add_item("10", 1);

?>

之后再设计有记名的手推车。记名手推车从手推车遗传下来,因此手推车拥有的方法及属性,记名手推车也有,而记名手推车比手推车增加了名字的方法 (或许该称属性较恰当)

从下例中可以看到,子类 Named_Cart 使用 extends 来继承其父类 Cart。虽然 Named_Cart 类中没有增加物品及减少物品的方法,不过由于遗传的特性,父类有的东西它都有。

<?php

// 程序名: named_cart.inc

require("cart.inc");

class Named_Cart extends Cart {

 var $owner;

 function set_owner ($name) {

    $this->owner = $name;

 }

}

?>

要使用记名手推车类,请看下面的范例。当然这不算太好的设计,每个子类都一直 require 它的父类,会造成服务器在 I/O 上面的负担。在实作时,可以将整个系列的类在同一个程序文件中,从最早的袓先类到最后的子孙类,也方便日后修正。

<?php

require("named_cart.inc");

$ncart = new Named_Cart;           // 建立类变量

$ncart->set_owner ("CyberRidder"); // 配置类的记名属性

echo $ncart->owner;                // 显示类的记名属性

$ncart->add_item ("10", 1);        // 从父类遗传的方法也可使用

?>

例:

class foo{

function do_foo(){

echo "";

}

}

$doo=new foo;

$doo->do_foo(); 调用对象中的函数

引用文件

引用文件的方法有两种:require include

require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。

include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

程序注释

<?php

 echo "这是第一种例子。"n"; // 本例是 C++ 语法的注释

 /* 本例采用多行的

     注释方式      */

 echo "这是第两种例子。"n";

 echo "这是第三种例子。"n"; # 本例使用 UNIX Shell 语法注释

?>

 

posted @ 2012-01-11 09:58  AIの海雅  阅读(209)  评论(0编辑  收藏  举报