资源描述
PHP & MySQL 初级教程
制做插件前如果还不会PHP和MySQL就先看一看吧~
1. PHP简介
PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。
PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。
PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点()自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装过程很简单。
1.1 历史
三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。
PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点()了解更多。
PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。
1.2 PHP的先进之处
应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者A这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点:
- 学习过程
我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。
PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。
你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。
- 数据库连接
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。
- 可扩展性
就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。
- 面向对象编程
PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。
- 可伸缩性
传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个谠诵械腃GI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。
- 更多特点
PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能!
1.3 竞争对手:ASP,mod_perl,JSP
我当然不清楚ASP/JSP能做些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。
据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。
mod_perl与Perl一样强大,只是更快一些。
2. PHP基本注意事项
2.1) Web Server 如何分辨PHP的档案与HTML档案:
要让Web Server 能执行文件中的PHP程式码,文件的副档名,必须是 .php或 .phtml。
2.2) 程式码区域的开始与结束:
为了让Web Server能区分出 PHP的程式码与HTML码,所以,在每段PHP程式码的开头必须加入
复制内容到剪贴板
代码:
<?php
,在结尾的地方加
复制内容到剪贴板
代码:
?>
。
2.3) 命令句:
在PHP中,每一个命令句必须以分号
复制内容到剪贴板
代码:
;
作结束。否则会出现问题。
2.4) 变数:
变数是用来储存程式执行时的暂存资料。在PHP中,变数之前必需加
复制内容到剪贴板
代码:
$
的符号。另外,PHP内编码的大小写是有差别的,所以在使用变数时,须注意大小写是否一致。PHP是属于 weakly typed的程式语言,对资料型态的规范较鬆,可以不先经宣告变数,就可以直接使用。好处是,程式写起来比较方便,坏处是,程式出问题时,比较难找出错误。
2.5) 程式注解:
PHP使用的注解符号,与C++,Java一样,单行的注解使用
复制内容到剪贴板
代码:
//
。//之后同一行所有的文字,都将不被执行。如果要使用多行的注解,可用
复制内容到剪贴板
代码:
/*
和
复制内容到剪贴板
代码:
*/
的注解符号(上下必须对其)。自/*开始到*/之间的所有文字,在执行时都会被乎略。
3. PHP基本程控结构
3.1 摘要:
程式控制结构,分为条件式于回圈两种,提供PHP程式決定判断的基本能力。
3.2 if 命令句:
实例:
复制内容到剪贴板
代码:
<?php
echo "if 范例: ";
if($fruit == "apple"){
echo '只有當 $fruit 变量等於是 apple 時, 这一行才会出现';
}
echo '<p>這一行永遠會出现: $fruit = '.$fruit."</p>";
?>
3.2.1
实例:
复制内容到剪贴板
代码:
<?php
echo "if-else 范例: ";
if($fruit == "apple"){
echo '<只有当 $fruit 变量等于是 apple 時, 这一行才会出现來';
}else{
echo '只要 $fruit 变量不是 apple 時, 就会出现这一行';
}echo '<p>我們的水果: $fruit = '.$fruit."</p>";?>
3.2.2
实例:
复制内容到剪贴板
代码:
<?php
echo "if-elseif-else 范例: ";
if($fruit == "apple"){
echo '只有当 $fruit 变量等於是 apple 時, 這一行才会出现';
}elseif($fruit=="orange"){
echo '只有当要 $fruit 变量是 orange 時, 才会出现这一行';
}else{
echo '>其他的, 都会出现这一行';
}echo '<p>我们的水果: $fruit = '.$fruit."</p>";
?>
3.2.3
实例: if的另一種用法, 內嵌在其他文件中
复制内容到剪贴板
代码:
<?php
if($fruit=="apple"):
?>
只有当 $fruit 变量等于 apple 時, 这一行才会出现
<?php
elseif($fruit=="orange"):
?>
只有当 $fruit 变量是 orange 時, 才会出现这一行
<?php
else:
?>
其他的, 都会出现这一行
<?php
endif;
?>
我们的水果: $fruit = <?=$fruit?>
3.3 switch 命令句:
用以当出于各种条件下选择后出现的结果[可以很好的替换多个if和elseif]
实例:
复制内容到剪贴板
代码:
<?php
echo "switch 范例: case 的标签值为常数";
switch($fruit){
case "apple":
$myfruit = "苹果";
break;
case "banana":
$myfruit = "香蕉";
break;
case "orange":
$myfruit = "柳橙";
break;
case "guava":
$myfruit = "石榴";
break;
case "pear":
$myfruit = "梨子";
break;
default: //default既默认选择
$myfruit = "西瓜";
} echo "你选的是 $myfruit ";
?>
3.3.1
使用变量
实例:
复制内容到剪贴板
代码:
<?php
echo "switch case 的标签值为变数";
$a = "apple";
$b = "banana";
$c = "orange";
$d = "guava";
$e = "pear";
switch($fruit){
case $a:
$myfruit = "苹果";
break;
case $b:
$myfruit = "香蕉";
break;
case $c:
$myfruit = "柳橙";
break;
case $d:
$myfruit = "石榴";
break;
case $e:
$myfruit = "梨子";
break;
default:
$myfruit = "西瓜";
} echo "你选的是 $myfruit ";
?>
3.4 while 回圈:
当 condition 的值为真时,一直执行 { 和 }所包围住的程式区段,直到 condition的值变成假的为止。所以,使用while回圈時,要特別注意,程式区段里的命令句,或?condition 这个运算式本身,必须要能随时更新,让 condition 能变成假的值。
实例:
复制内容到剪贴板
代码:
while(condition){
statement 1;
statement 2;
.
.
statement n;
}
3.4.1
{ }所包围的程式区段, 改变 while 的 condition
实例:
复制内容到剪贴板
代码:
<?php
$i = 0;
while($i < 10){
echo "$i 的平方: ".$i * $i."<br />";
$i++;
}
?>
3.4.2 while 的另一种用法, 內嵌在其他文件中
实例:
复制内容到剪贴板
代码:
<?php $i = 0; ?>
<?php while($i++ < 10): ?>
<?=$i?> 的平方: <?=$i * $i?> <br />
<?php endwhile;?>
3.5 for 回圈:
用法差不多,但还是给点实例吧
实例:
复制内容到剪贴板
代码:
<?php
for($i = 1; $i < 10; $i++){
echo "<TR><TD>$i</TD><TD>".$i * $i."</TD></TR>";
}
echo "</TABLE>";
?>
3.5.1 for 的另一种用法, 內嵌在其他文件中
实例:
复制内容到剪贴板
代码:
<TABLE border=1>
<TR><TD>数字</TD><TD>平方</TD></TR>
<?php for($i = 1; $i < 10; $i++): ?>
<TR><TD><?=$i?></TD><TD><?=$i * $i?></TD></TR>
<?php endfor;?>
</TABLE>
3.6 利用$_GET:
$_GET可以从网址获取变量信息,比如说:
那么,PHP档案就可以这样写(把$_GET引用近来):
复制内容到剪贴板
代码:
<?php
if(PHP_VERSION < '4.1.0') {
$_GET = &$HTTP_GET_VARS;
}
if(!$register_globals || !$magic_quotes_gpc) {
@extract(addslashes($_GET));
}
if($action == 'haha') {
echo "great";
}
?>
综合小实例:
写一個程式模拟投掷一颗骰子6000次,并记录每每个点数,出现的次数。
实例1:
[code]
<?php
define ("THROWS", 6000);
$p1 = 0;
$p2 = 0;
$p3 = 0;
$p4 = 0;
$p5 = 0;
$p6 = 0;
for($i = 0; $i < THROWS; $i++){
$p = rand(1, 6);
switch($p){
case 1:
$p1++;
break;
case 2:
$p2++;
break;
case 3:
$p3++;
break;
case 4:
$p4++;
break;
case 5:
$p5++;
break;
case 6:
$p6++;
break;
}
}echo <<<END
<div align=center>掷骰子<br></div>
<TABLE border=1 align=center>
<TR>
<TD>点数</TD>
<TD>次数</TD>
</TR>
<TR>
<TD>1</TD>
<TD>$p1</TD>
</TR>
<TR>
<TD>2</TD>
<TD>$p2</TD>
</TR>
<TR>
<TD>3</TD>
<TD>$p3</TD>
</TR>
<TR>
<TD>4</TD>
<TD>$p4</TD>
</TR>
<TR>
<TD>5</TD>
<TD>$p5</TD>
</TR>
<TR>
<TD>6</TD>
<TD>$p6</TD>
</TR>
</TABLE>
END;
?>
实例2:
复制内容到剪贴板
代码:
<?php
define ("THROWS", 6000);
$p = array(0,0,0,0,0,0,0);
for($i = 0; $i < THROWS; $i++){
$points = rand(1, 6);
$p[$points]++;
}echo <<<END
<div align=center>"掷骰子: 使用阵列"<br></div>
<TABLE border=1 align=center>
<TR>
<TD>点数</TD>
<TD>次数</TD>
</TR>
<TR>
<TD>1</TD>
<TD>$p[1]</TD>
</TR>
<TR>
<TD>2</TD>
<TD>$p[2]</TD>
</TR>
<TR>
<TD>3</TD>
<TD>$p[3]</TD>
</TR>
<TR>
<TD>4</TD>
<TD>$p[4]</TD>
</TR>
<TR>
<TD>5</TD>
<TD>$p[5]</TD>
</TR>
<TR>
<TD>6</TD>
<TD>$p[6]</TD>
</TR>
</TABLE>
END;
?>
4. PHP数据类型
PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。当然,如果你喜欢的话,你也可以使用cast或者函数settype()将某种类型的变量转换成指定的类型。
4.1 数值
数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值:
复制内容到剪贴板
代码:
$a = 1234; # 十进制数
$a = -123; # 负数
$a = 0123; # 八进制数 (等于十进制数的83)
$a = 0x12; # 十六进制数(等于十进制数的18)
$a = 1.234; # 浮点数"双精度数"
$a = 1.2e3; # 双精度数的指数形式
字符串
字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。而且,在双引号字符串中可以使用反斜杠()在字符串中加入转义序列和转换字符。举例如下:
复制内容到剪贴板
代码:
$first = 'Hello';
$second = "World";
$full1 = "$first $second"; # 产生 Hello World
$full2 = '$first $second';# 产生 $first $second
$full3="01DC studio,." 2000 copyright." " ;
请注意最后一行,如果需要在字符串中使用双引号,可以使用反斜杠字符,象该行语句所示。这里的的反斜杠用来使双引号的功能改变。
可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。
4.2 数组与哈希表
数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。
// 一个包含两个元素的数组
$a[0] = "first";
$a[1] = "second";
$a[] = "third"; // 添加数组元素的简单方法
// 现在$a[2]被赋值为"third"
echo count($a); // 打印出3,因为该数组有3个元素
// 用一个语句定义一个数组并赋值
$myphonebook = array (
"sbabu" => "5348",
"keith" => "4829",
"carole" => "4533"
);
// 噢,忘了教长吧,让我们添加一个元素
$myphonebook["dean"] = "5397";
// 你定义的carale元素错了,让我们更正它
$myphonebook["carole"] => "4522"
// 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看
echo "$myphonebook[0]"; // sbabu
echo "$myphonebook[1]"; // 5348
其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。
4.3 对象
使用new语句产生一个对象:
实例:
复制内容到剪贴板
代码:
<?php
class foo
{
function do_foo ()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
4.4 改变变量类型
在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。"
复制内容到剪贴板
代码:
$foo = "0"; // $foo是字符串(ASCII 48)
$foo++; // $foo是字符串"1" (ASCII 49)
$foo += 1; // $foo现在是整数(2)
$foo = $foo + 1.3; // $foo是一个双精度数(3.3)
$foo = 5 + "10 Little Piggies"; // $foo是一个整数(15)
$foo = 5 + "10 Small Pigs"; // $foo是一个整数(15)
如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。
4.5 变量与常量
在上一帖已经用到了变量,所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。
实例:
复制内容到剪贴板
代码:
<?php
$g_var = 1 ; // 全局范围
function test()
{
global $g_var; // 这样就可以声明全局变量了
}
?>
PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define("CONSTANT","value")。
4.6 运算符
PHP具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用"="。
4.5.1算术和字符
以下只有一种运算符是有关字符的:
复制内容到剪贴板
代码:
$a + $b :加
$a - $b :减
$a * $b :乘
$a / $b :除
$a % $b :取模(余数)
$a . $b :字符串连接
4.5.2逻辑和比较
逻辑运算符有:
复制内容到剪贴板
代码:
$a || $b :或
$a or $b :或
$a && $b :与
$a and $b :与
$a xor $b :异或 (当$a或$b为true时为true,两者一样时为false)
! $a :非
复制内容到剪贴板
代码:
比较运算符有:
$a == $b :相等
$a != $b :不等
$a < $b :小于
$a <= $b :小于等于
$a > $b :大于
$a >= $b :大于等于
与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。
优先权
就和C以及Java一样!
4.7 控制流程结构
PHP有着与C一样的流程控制。大部分在上一贴已经解释过,在这儿让大家复习复习~
4.7.1 if, else, elseif, if(): endif
复制内容到剪贴板
代码:
if (表达式一)
{
. . .
}
elseif (表达式二)
{
. . .
}
else
{
. . .
}
// 或者像Python一样
if (表达式一) :
. . .
. . .
elseif (表达式二) :
. . .
else :
. . .
endif ;
4.7.2 while, do..while, for
复制内容到剪贴板
代码:
while (表达式)
{
. . .
}
do
{
. . .
}
while (表达式);
for (表达式一; 表达式二; 表达式三)
{
. . .
}
//或者像Python一样
while (expr) :
. . .
endwhile ;
4.7.3 switch
switch是对多重if-elseif-else结构的最好的替换:
实例:
复制内容到剪贴板
代码:
switch ($i)
{
case 0:
print "i equals 0";
case 1:
print "i equals 1";
case 2:
print "i equals 2";
}
4.7.4 break, continue
break中断当前的循环控制结构。
continue被用来跳出剩下的当前循环并继续执行下一次循环。
4.7.5 require, include
就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。
4.8 函数
你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型:
实例:
复制内容到剪贴板
代码:
function foo (变量名一, 变量名二, . . . , 变量名n)
{
echo "Example function.n";
return $retval;
}
所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。
4.9 类
利用类模型建立类。由于较复杂,这里不加解说
实例:
复制内容到剪贴板
代码:
class Employee
{
var $empno; // 员工人数
var $empnm; // 员工姓名
function add_employee($in_num, $in_name)
{
$this->empno = $in_num;
$this->empnm = $in_name;
}
function show()
{
echo "$this->empno, $this->empnm";
return;
}
function changenm($in_name)
{
$this->empnm = $in_name;
}
}
$sbabu = new Employee;
$sbabu->add_employee(10,"sbabu");
$sbabu->changenm("babu");
$sbabu->show();
5. PHP函式的应用
函式,是一个独立的程式码区段,只需撰写一次,就可以让程式的其他部分,藉由呼叫函式的方式,重复使用。通常,函式会接受参数,执行特定的功能,传回程式执行的结果。藉由使用函式,可以节省你的程式开发时间,以及减少程式的臭虫,提高程式的可维护性。
但是,光是把程式码,写成函式,并不会让你的程式变得更好,或是让你的工作变得更轻鬆。你必须学习养成如何撰写好的函式。好的函式,通常有以下的特质:
最好不超过一页:太长的函式,通常不好维护,而且容易发生错误。
函式只执行一个特定的功能:如果,在一个函式裡面,执行多个功能时,通常必须把各功能,再切割成独立的函式。这样,才可以更模组化,在主程式组合这些功能时,能更有弹性。
好的函式,会有好名字:如果,你无法替你的函式,找出一个好名字的话,通常代表,你对函式的功能,没有具体的认知。自然无法写出好的函式。
我们使用范例,来学习如何撰写函式:
1) 函式的语法。
2) 参数传递。
3) 预设参数。
4) 函式内变数的范围。
5) 使用 include()函式,来建立自己的函式库。
5.1 函式的语法
撰写函式时,在 function保留字之后,接著是使用者自己命名的函式名称。函式名称之后,是由括弧所包含的是要交给函式处理的参数。视情况需要,函式可以接受任何数目的参数,包括不接受任何参数。之后,是由 { 和 }所包含的程式区段。
函式的执行:在主程式呼叫函式之后,自 { 开始由上而下的顺序,一直执行到 }為止或碰到 return 的命令句时结束。
return 可以用来结束函式的执行,return 后面如果有接任何运算式,则会将运算式所得的结果,传回给主程式。
实例:
复制内容到剪贴板
代码:
function 函式名称([参数1,参数2, ...参数n]){
程式码
}
实例: (无参数, 无回转值)
复制内容到剪贴板
代码:
<?php
function today(){
$ty = date("Y") - 1911;
echo '民国 '.$ty.'年'.date("m月d日");
}
today();
?>
实例: (无参数, 有回转值)
复制内容到剪贴板
代码:
<?php
function today(){
$ty = date("Y") - 1911;
return'民国 '.$ty.'年'.date("m月d日");
}
echo today();
?>
实例: (有参数, 有回转值)
复制内容到剪贴板
代码:
<?php
function numberOptions($start, $end, $selected){
$option = "";
for($i = $start; $i <= $end; $i++){
$list .= "<option value='$i'";
if($i==$selected){
$list .= " SELECTED";
}
$list .=">$i</option>";
}
return $list;
}
$yr = date('Y') - 1911;
$yr_start = $yr - 5;
$yr_end = $yr + 5;
$mn = date('m');
$dy = date('d');
$yr_option = numberOptions($yr_start, $yr_end, $yr);
$mn_option = numberOptions(1, 12, $mn);
$dy_option = numberOptions(1, 31, $dy);
?>
民国 <select name=year><?php echo $yr_option; ?></select>年
<select name=month><?php echo $mn_option; ?
展开阅读全文