php学习笔记(2)
1、算数运算
<?php $a = 8; $b = 2; $c = 3; echo $a+$b."<br>\n"; echo $a-$b."<br>\n"; echo $a*$b."<br>\n"; echo $a/$b."<br>\n"; echo $a%$c."<br>\n"; $a++; echo $a."<br>\n"; $c--; echo $c; ?>
2、字符串运算
字符串运算 (string operator) 的运算符号只有一个,就是英文的句号 .。它可以将字符串连接起来,变成合并的新字符串。
<?php $a = "PHP 4"; $b = "功能强大"; echo $a.": ".$b; ?>
3、赋值运算
<?php $a = 5; $a += 2; // 即 $a = $a + 2; echo $a."<br>\n"; $b = "哇"; $b .= "哈"; // $b = "哇哈"; $b .= "哈"; // $b = "哇哈哈"; echo "$b<br>\n"; ?>
4、逻辑运算

<? $a = 5; if ($a != 5) { echo "$a 不是 5"; } else { echo "$a 是 5"; } ?>
5、其他运算符

6、逻辑控制
1)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 $f="/usr/local/lib/php3.ini"; if (file_exists($f)) { echo "以下是 PHP3 的配置文件<p><pre>\n"; readfile($f); echo "</pre>\n"; } else echo "很抱歉,找不到 $f"; ?> <?php if ($a > $b) { echo "a 比 b 大"; } elseif ($a == $b) { echo "a 等于 b"; } else { echo "a 比 b 小"; } ?>
2)do..while 是重复叙述的循环,可以分成两种模式。
while (expr) { statement } <?php $i = 1; while ($i <= 10) { print $i++; echo ". 以后不敢了<br>\n"; } ?> /* 先判断后执行 */ <?php $i = 1; while ($i <= 10): print $i++; echo ". 以后不敢了<br>\n"; endwhile; ?> /* 先执行后判断 */ do { statement } while (expr);
3)for 循环就单纯只有一种,没有变化
for (expr1; expr2; expr3) { statement } <?php for ($i=1; $i<=10; $i++) { echo "$i. 以后不敢了<br>\n"; } ?>
4)switch 循环,通常处理复合式的条件判断,每个子条件,都是 case 指令部分。在实作上若使用许多类似的 if 指令,可以将它综合成 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 "Wed": echo "今天星期三"; break; case "Thu": echo "今天星期四"; break; case "Fri": echo "今天星期五"; break; default: echo "今天放假"; break; } ?>
5)除了上面的流程控制指令之外,尚有 break 及 continue 两个流程控制指令。
/* 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); } ?>
7、函数
函数名不区分大小写,所以需要保证唯一性。
PHP函数支持传值和传址两种传参方式。传址是为了在执行函数的同时改变函数参数的只,而传值不期望改变。
function myfunc($arg_1, $arg_2, ..., $arg_n) { // 执行一些步骤 return $retval; } /* 不使用默认值 */ <?php function myfunc1($arg_1, $arg_2, $arg_3="我是默认字符串") { echo $arg_1+$arg_2; echo $arg_3."<p>\n"; } /* 使用默认值 */ myfunc(3, 4); // 参数 $arg_3 省略。 myfunc(6, 6, "不用默认值") // 输入参数 $arg_3。 ?>
传址的方式是传入参数的指针,方法就是在参数的前面加上 & 符号即可。如下例
<?php function myfunc2(&$argstr) { $argstr=ereg_replace("/", "-", $argstr); } $today="2000/01/01"; myfunc2($today); echo $today; // 2000-01-01; ?>
<?php $i = 100; function func($n){ $n = $n + 100; return $n; } echo '1)函数传值前变量$i的值:'.$i.'<br>'; echo '2)传值后函数的返回值:'.func($i).'<br>'; echo '3)函数传值后变量$i的值:'.$i.'<br>'; echo '4)函数传址前变量$i的值:'.$i.'<br>'; echo '5)传址后函数的返回值:'.func(&$i).'<br>'; echo '6)函数传址后变量$i的值:'.$i.'<br>'; //echo func($i).'<br>'; ?>
8、类
PHP 只有类别 (class)、方法 (method)、属性、以及单一继承 (extensions) 等。
下面的范例是手推车类。可以看到,使用 class 表示它是一个类类别。在类别中的 function,例如 add_item 则表示该类的一个方法。方法可以封装类的实际处理情形,让该类自己能依封装好的方法来执行一些步骤。
<?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); ?>
<?php // 程序名: named_cart.inc require("cart.inc"); class Named_Cart extends Cart { var $owner; function set_owner ($name) { $this->owner = $name; } } ?>
<?php require("named_cart.inc"); $ncart = new Named_Cart; // 建立类变量 $ncart->set_owner ("CyberRidder"); // 配置类的记名属性 echo $ncart->owner; // 显示类的记名属性 $ncart->add_item ("10", 1); // 从父类遗传的方法也可使用 ?>

浙公网安备 33010602011771号