搜索
您的当前位置:首页正文

PHP概述

来源:好土汽车网
PHP

学习内容:

PHP语言,分三个阶段学习:初级、中级、高级 初级学习大概是7天左右,内容有: 1) 介绍PHP、它的工作原理、安装 2) 基本语法、数据类型、常量和变量

3) PHP提交表单的方法、运算符表达式、条件判断语句在PHP中的用法 4) PHP中的常用函数(function)、类(class) 5) 帮助中常用的内容

中级主要是讲Smarty,Smarty是使用PHP写出来的模板PHP模板引擎,程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑

高级主要是讲Mojavi, Mojavi是基于MVC的框架结构。框架将强制把页面与程序分离, Java,ASP.NET 使用Struts。

FileZilla FileZilla 2.2.15

FileZilla FileZilla 2.2.14b 描述:

BUGTRAQ ID: 14730

FileZilla是一款Windows平台的开放源码FTP/SFTP客户端。

php.ini 配置文件中的指令 asp_tags 打开后才可用。

- 1 -

PHP 了解PHP

1. 什么是PHP?

PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。而 PHP 独特的语法混合了 C、Java、Perl 以及 PHP 式的新语法。

PHP 能够用在所有的主流操作系统上,包括 Linux、Unix 的各种变种(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows、Mac OS X、RISC OS 等。今天,PHP已经支持了大多数的 web 服务器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd 等。 PHP 最强大最显著的特性之一,是它支持很大范围的数据库。目前,PHP 支持如下数据库: Adabas D dBase Empress

FilePro(只读) Hyperwave IBM DB2 Informix Ingres

2. PHP工作原理

PHP的所有应用程序都是通过WEB服务器(如IIS或Apache)和PHP引擎程序解释执行完成的,工作过程:

 从客户端的浏览器中对Web服务器发送一个请求。

 Apache得到对test.php的请求,.php文件由PHP预处理器处理。

InterBase FrontBase mSQL

Direct MS-SQL MySQL ODBC Ovrimos

PostgreSQL SQLite Solid Sybase Velocis Unix dbm

- 2 -

 test.php是包含命令的一个PHP脚本。这些命令之一是打开一个到一

个数据库的连接并取出数据。PHP 处理到数据库的连接,并且解释SQL调用从DB中提取数据。

 服务器服务器得到从PHP解释器来的连接请求,并且处理这个请求。

数据库然后将应答和结果回送到PHP解释器。

 Apache回送该结果到客户端的浏览器浏览器,作为对他请求的应答。

客户端的浏览器上显示一个包含从一个数据库来的一些信息的网页。  从客户端的浏览器请求该页,请求被发送给web服务器,接着调用一

个PHP脚本。PHP脚本由PHP预处理器解释并从数据库中取出数据,然后结果由余下的PHP脚本加工并转化成HTML,做后的HTML被发回用户的浏览器。

Apache PHP预(Web 服务器) 处理器 客户端 浏览器

3. 在windows上安装Apache、PHP、MySQL

DB类 PostgreSQL (DB数据库) Linux(操作系统) (1)Apache: 和IIS一样同属于Web服务器,是当今最流行的服务器,支持Linux和Unix,IIS只支持Windows。

(2)安装XAMPP: 将 XAMPP 解压到“D:\\program files”路径下的“D:\\program files\\xampp”文件夹中,然后安装。

注: Apache web 服务器在启动时会把目录转到根目录,这将导致 PHP 尝试在根目录下读取 php.ini,如果存在的话。

安装结束后打开网页,在地址栏中输入http://localhost,点击左侧

- 3 -

chinese显示版本php5.1,停止服务器,启动所有程序中的Xampp – php switch 之后输入4,改成版本php4.4.1,在开启服务器。刷新页面。 在C:\\Program Files\\xampp\\htdocs下新建work文件夹,将新建的文件存在此路径下,访问地址:http://localhost/work/test.php

4. Helle World

PHP 测试

Hello World^0^

'; ?>

- 4 -

PHP基础语法

1. PHP中输出文本

Hello World^^

'; ?>

\"echo\"是用来显示输出的,PHP语句之间使用“;” 分隔,它也是语句结束符。 2. PHP标记

(1) (2)echo(“如果你想服务于XML文档就是用这种方式”); ?>

(3)

(4)<% echo (“ASP的风格的标记”); %>

注: 此外注意如果将 PHP 嵌入到 XML 或 XHTML 中则需要使用 以保持符合标准。 3. PHP注释

PHP 支持 C,C++风格的注释。注释有如下三种注释方式: echo \"这是第一种例子。\\n\"; // 本例是 C++ 语法的注释 /* 本例采用多行的

echo '

Hello EveryOne^^

';

注释方式 */

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

?>

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

- 5 -

C 风格的注释在碰到第一个 */ 时结束。小心不要嵌套 C 风格的注释,当注释大量代码时,可能犯该错误。 echo \"This is a test\"; /* This comment will cause a problem */ */ ?>

4. PHP常量和变量 常量:

合法的常量名以字母(由大写字母组成和C语言一样)或下划线开始,后面跟着任何字母,数字或下划线。 常量和变量不同:

常量前面没有美元符号($);

 常量只能用 define() 函数定义,而不能通过赋值语句;  常量可以不用理会变量范围的规则而在任何地方定义和访问;  常量一旦定义就不能被重新定义或者取消定义;

常量只能包含标量数据(boolean,integer,float 和 string)。 常量的范围是全局的。不用管作用域就可以在脚本的任何地方访问常量 define() 的功能可以让我们自行定义所需要的常量。见下例

define(\"CONSTANT\", \"Hello world.\"); echo CONSTANT; // outputs \"Hello world.\"

echo Constant; // outputs \"Constant\" and issues a notice. ?> 变量:

- 6 -

变量用一个美元符号($)后面跟变量名来表示。变量名是区分大小写的。 一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,

数字或下划线。 5. PHP数据类型

1) 数据类型 四种标量类型:

boolean(布尔型):表达了真值,可以为 TRUE 或 FALSE。

要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都不区分大小写。 $foo = True; // assign the value TRUE to $foo ?>

当转换为 boolean 时,以下值被认为是 FALSE:

     

布尔值 FALSE 整型值 0(零) 浮点型值 0.0(零)

空白字符串和字符串 \"0\" 没有成员变量的数组

特殊类型 NULL(包括尚未设定的变量)

注意:-1 和其它非零值(不论正负)一样,被认为是 TRUE!

integer(整型)

integer 为整数型别。在 32 位的操作系统中,它的有效范围是 -2,147,483,648 到 +2,147,483,647 (2^31+符号位)。要使用 16 进位整数可以在面加 0x。 整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。

如果用八进制符号,数字前必须加上 0(零),用十六进制符号数字前必须加上 0x。

$a = 1234; // 十进制数 $a = -123; // 一个负数

$a = 0123; // 八进制数(等于十进制的 83)

- 7 -

$a = 0x1A; // 十六进制数(等于十进制的 26) ?>

float(也叫浮点数,双精度数或实数)

浮点数为浮点数型别。在 32 位的操作系统中,它的有效范围是 1.7E-308 到 1.7E+308。(自然底数e=2.71828183) $a = 1.234; $a = 1.2e3; $a = 7E-10; ?>

string(字符串)

即为字符串变量,无论是单一字符或数千字的字符串都是使用这个变量类型。值得注意的是要指定字符串给字符串变量,要在头尾加上双引号 (例如: \"这是字符串\")。在要让字符串换行时,可使用溢出字符,也就是反斜线加上指定的符号,若是 \\x 加上二位数字,如 \\xFE 即表十六进位字符,详见下表: 符号 意义 \\\" 双引号 \\\\ 反斜线 \\n 换行回车 \\r 送出 CR \ 跳位 (TAB) 定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引号。下面的引号串都是合法的:

$s = \"I' m a student\"; $s = ' I am a “student” ';

当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,于是:

\"Why doesn't \"this\" work?\"

实际上被PHP语法分析器分成三个部分:

- 8 -

\"Why doesn't \"——包含一个单引号的双引号串 this——多余的字符,分析器无法处理 \" work?\" ——普通字符串

上面的这个例子企图在双引号串中包含双引号,而分析器在遇到第二个双引号时便认为字符串结束了。要达到包含引号的目的, 必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的 前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:

\"Why doesn't \\\"that\\\" work?\"

字串可以使用字串连接符(.)来连接,如:

$first_name = 'A'; $last_name = 'B';

$full_name = $first_name . ' ' . $last_name; 注意:echo $aa. ‘test
’;

echo \"$aa test
\";//在双引号中,变量名称被变量值替代

echo ’$aa test
’;;?>//在单引号中,变量名称或其他的文本都会不经修改而发送给浏览器

两种复合类型:

array(数组)

array 为数组变量,可以是二维、三维或者多维数组,其中的元素也很自由,可以是 string、integer 或者 double,甚至是 array。

可以用 array() 语言结构来新建一个 array。它接受一定数量用逗号分隔的 key => value 参数对。

$a = array( 1 => 'one', 2 => 'two', 3 => 'three' ); $MyArray1 = array(\"a\", \"b\", \"c\", \"d\");//一维数组 $MyArray2 = array(

\"地支\" => array(\"子\", \"丑\", \"寅\", \"卯\"), \"生肖\" => array(\"鼠\", \"牛\", \"虎\", \"兔\"), \"数字\" => array(1, 2, 3, 4) ); //二维数组

- 9 -

$arr = array(\"foo\" => \"bar\", 12 => true);

echo $arr[\"foo\"]; // bar echo $arr[12]; // 1 ?>

结果:bar1 $MyArray1 = array(\"a\echo $MyArray1[1]; print_r($MyArray1); ?>

结果:b(索引值从0开始) 数据类型强制转换:

$foo = 10; // $foo is an integer

$bar = (bool) $foo; // $bar is a boolean ?>

允许的强制转换有:

     

(int),(integer) - 转换成整型 (bool),(boolean) - 转换成布尔型

(float),(double),(real) - 转换成浮点型 (string) - 转换成字符串 (array) - 转换成数组 (object) - 转换成对象

可变变量(variable variable):

$$a = '张三';?>

- 10 -

这个代码等价于:$name = 张三;

$a = \"Hello\"; $$a = \"world\";

echo \"$a, $hello\"; // Hello, world echo \"$a, {$a}\"; // 也是 Hello, world ?>

变量范围(作用域):

作用域是指在一个脚本中某个变量在哪些地方可以使用或可见。 全局变量(global variable):

$a = 1;$b = 2; function Sum(){

global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> 输出是’3’

局部变量(local variable):任何用于函数内部的变量将被限制在局部函数范围内。

$a = 1; /* global scope */ function Test(){

($a = 2 ;)

echo $a; /* reference to local scope variable */ } Test(); ?> 什么也不输出

- 11 -

静态变量(static variable):在函数退出时, 这个变量始终存在,不被销毁, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。

// 静态变量的例子 function myfunc() { static $mystr; $mystr.=\"哈\";

echo $mystr.\"
\\n\"; }

myfunc(); // 哈 myfunc(); // 哈哈 myfunc(); // 哈哈哈 ?>

PHP运算符、提交表单方法、条件语句

使用操作符:操作符是用来对数值和变量进行某种操作运算的符号。 学过的两个操作符:赋值操作符(=)和字符串连接操作符(.)。 算数操作符:

例子 -$a 名称 结果 取反 $a 的负值。 $a + $b 加法 $a 和 $b 的和。 $a - $b 减法 $a 和 $b 的差。 $a * $b 乘法 $a 和 $b 的积。 $a / $b 除法 $a 除以 $b 的商。 $a % $b 取余数 $a 除以 $b 的余数。 (“/”)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。

- 12 -

注: 取模 $a % $b 在 $a 为负值时的结果也是负值。

echo $a+$b.\"
\\n\"; echo $a-$b.\"
\\n\"; echo $a*$b.\"
\\n\"; echo $a/$b.\"
\\n\"; echo $a%$c.\"
\\n\";

?>

注意:(*)作为乘法操作符,而不是常规的乘法符号。除法操作符同理。

字符串运算符:

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

$a = \"Hello \";

$b = $a . \"World!\"; // now $b contains \"Hello World!\"

$a = \"Hello \";

$a .= \"World!\"; // now $a contains \"Hello World!\" ?>

赋值运算符:

基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。

- 13 -

赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3。

$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。 ?>

括号提高子表达式的优先级

复合赋值操作符:

增加程序的执行效率。 符号 = += -= *= /= %= .= $a += 2; // 即 $a = $a + 2; echo $a.\"
\\n\"; $b = \"哇\";

使用方法 $a=$b $a+=$b $a-=$b $a*=$b $a/=$b $a%=$b $a.=$b 等价于 $a=$b $a=$a+$b $a=$a-$b $a=$a*$b $a=$a/$b $a=$a%$b $a=$a.$b 意义 将右边的值连到左边 将右边的值加到左边 将右边的值减到左边 将左边的值乘以右边 将左边的值除以右边 将左边的值对右边取余数 将右边的字符串加到左边 - 14 -

$b .= \"哈\"; // $b = \"哇哈\"; $b .= \"哈\"; // $b = \"哇哈哈\"; echo \"$b
\\n\"; ?>

递增/递减运算符:

注: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。注意字符变量只能递增,不能递减。

例子 ++$a $a++ --$a $a-- 名称 前加 后加 前减 后减 效果 $a 的值加一,然后返回 $a。 返回 $a,然后将 $a 的值加一。 $a 的值减一, 然后返回 $a。 返回 $a,然后将 $a 的值减一。 echo \"**********\"; $a = 5;

echo \"a++\" . $a++ . \"
\\n\"; echo \"a \" . $a . \"
\\n\";

echo \"**********\"; $a = 5;

echo \"++a\" . ++$a . \"
\\n\"; echo \"a\" . $a . \"
\\n\";

echo \"**********\"; $a = 5;

echo \"a--\" . $a-- . \"
\\n\"; echo \"a\" . $a . \"
\\n\";

- 15 -

echo \"**********\"; $a = 5;

echo \"--a\" . --$a . \"
\\n\"; echo \"a\" . $a . \"
\\n\"; ?>

比较运算符: 比较两个值。根据比较结果返回:true或false。

例子

名称 结果 TRUE,如果 $a 等于 $b。 TRUE,如果 $a 不等于 $b。 TRUE,如果 $a 不等于 $b。 TRUE,如果 $a 严格小于 $b。 TRUE,如果 $a 严格 $b。 $a == $b 等于 $a != $b 不等 $a <> $b 不等 $a < $b 小与 $a > $b 大于 $a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。 $a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。 逻辑运算符: 例子 名称 结果 TRUE,如果 $a 或 $b 任一为 TRUE。 $a and $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE。 $a or $b Or(逻辑或) ! $a $a xor $b Xor(逻辑异或) TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。 Not(逻辑非) TRUE,如果 $a 不为 TRUE。 TRUE,如果 $a 或 $b 任一为 TRUE。 $a && $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE。 $a || $b Or(逻辑或) “与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同 if ($a and $b){ echo \"真\";

} else { echo\"假\"; } ?>

- 16 -

$a=\"0\"; $b=\"1\";

if ($a and $b){ echo \"真\";

PHP中提交页面的POST和GET方法

} else { echo\"假\"; } ?>

在Form里面,可以使用post也可以使用get。post和get方法在使用上至

少有两点不同:

1、Get方法通过URL请求来传递用户的输入。Post方法通过另外的形式。 2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。 提示

通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。

建议在Form中,建议使用post方法。 $_POST和$_GETphp自动设置的变量

自动全局变量 $_POST,它包含了所有的 POST 数据

GET 方法,那么表单中的信息将被储存到自动全局变量 $_GET 中 test.html



- 2 -

Test.php echo \"姓名:\".$nm.\"
\"; echo \"女姓名:\".$love_nm;

//echo \"姓名:\".$_POST[nm].\"
\"; //echo \"女姓名:\".$_POST[love_nm]; ?>

条件判断语句:

第一种是只有用到 if 条件,当作单纯的判断。解释成 \"若发生了某事则怎样处理\"。 if (expr) { statement }

其中的 expr 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。 范例:本例省略大括号。 if (1==1) echo \"1等于1\"; ?>

范例:本例的执行部分有三行,不可省略大括号。 if (1==1) {

echo \"1等于1\"; echo \"1就等于1\";

- 2 -

} ?>

第两种是除了 if 之外,加上了 else 的条件,可解释成 \"若发生了某事则怎样处理,否则该如何解决\"。

范例:上面的例子来修改成更完整的处理。其中的 else 由于只有一行执行的指令,因此不用加上大括号。 echo \"a等于b\"; } else{

echo\"a不等于b\"; }

?>

第三种就是递归的 if..else 循环,通常用在多种决策判断时。它将数个 if..else 拿来合并运用处理。 直接看下面的例子 if ($a > $b) {

echo \"a 比 b 大\"; } elseif ($a == $b) { echo \"a 等于 b\"; } else {

echo \"a 比 b 小\"; } ?>

上例只用二层的 if..else 循环,用来比较 a 和 b 两个变量。实际要使用这种递归 if..else 循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会造成程序出现莫名其妙的问题。

do..while 是重复叙述的循环,可以分成两种模式。

- 3 -

最单纯的就是只有 while 的循环。用来在指定的条件内,不断地重覆指定的步骤。语法如下 while (expr) { statement }

其中的 expr 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。

下例很有趣,要电脑的浏览器出现十次 \"以后不敢了\" 的字符串,前面并加上数字,表示说了第几次不敢了。(感觉好像是 Web Server 做错事被处罚) while ($i <= 10) { print $i++;

echo \". 以后不敢了
\\n\"; } ?>

while 可以不用大括号来包住执行部分,而使用冒号加上 endwhile。见下例 while ($i <= 10): print $i++;

echo \". 以后不敢了
\\n\"; endwhile; ?>

另外一种 do..while 循环则先执行,再判断是否要继续执行,也就是说循环至少执行一次,有点像是先斩后奏的方法。这种的循环,和单用 while 是不同的 (单用 while 是先判断再处理)。若读者熟 Pascal 语言的话,会发现 do..while 循环像是 Pascal 的 repeat..until 循环

for 循环就单纯只有一种,没有变化,它的语法如下 for (expr1; expr2; expr3) { statement }

- 4 -

其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。

下例是用 for 循环写的 \"以后不敢了\" 的例子,可以拿来和用 while 循环的比较。

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

echo \"$i. 以后不敢了
\\n\"; } ?>

从上例中,可以很明显的看到,用 for 和用 while 的不同。实际应用上,若循环有初始值,且都要累加(或累减),则使用 for 循环比用 while 循环好。例如将资料从数据库取出,可能用 for 循环会比用 while 循环适合?

switch 循环,通常处理复合式的条件判断,每个子条件,都是 case 指令部分。在实作上若使用许多类似的 if 指令,可以将它综合成 switch 循环。 语法如下 switch (expr) { case expr1: statement1; break; case expr2: statement2; break; : :

default:

statementN; break; }

其中的 expr 条件,通常为变量名称。而 case 后的 exprN,通常表示变量值。冒号后则为符合该条件要执行的部分。注意要用 break 跳离循环。

- 5 -

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; } ?>

很明显的,上述的例子用 if 循环就很麻烦了。当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序.

- 6 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Top