PHP创新教程100例上.docx
《PHP创新教程100例上.docx》由会员分享,可在线阅读,更多相关《PHP创新教程100例上.docx(30页珍藏版)》请在冰豆网上搜索。
PHP创新教程100例上
2016PHP最新教程100例
-Nesla.Ben
1.PHP是什么?
2.PHP(“PHP:
HypertextPreprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到HTML中,尤其适合web开发。
3.以上是一个简单的回答,不过这是什么意思呢?
请看如下例子:
4.Example#1一个介绍性的范例
5.
Example
php
echo "Hi, I'm a PHP script!
";
?
>
6.请注意这个范例和其它用C或Perl语言写的脚本之间的区别——与用大量的命令来编写程序以输出HTML不同的是,我们用PHP编写了一个HTML脚本,其中嵌入了一些代码来做一些事情(例如,在本例中输出了一些文本)。
PHP代码被包含在特殊的起始符和结束符中,使得可以进出“PHP模式”。
7.和客户端的JavaScript不同的是,PHP代码是运行在服务端的。
如果在服务器上建立了如上例类似的代码,则在运行该脚本后,客户端就能接收到其结果,但他们无法得知其背后的代码是如何运作的。
甚至可以将web服务器设置成让PHP来处理所有的HTML文件,这么一来,用户就无法得知服务端到底做了什么。
8.使用PHP的一大好处是它对于初学者来说极其简单,同时也给专业的程序员提供了各种高级的特性。
当看到PHP长长的特性列表时,请不要害怕。
可以很快的入门,只需几个小时就可以自己写一些简单的脚本。
9.尽管PHP的开发是以服务端脚本为目的,但事实上其功能远不局限与此。
请继续读后面的章节,在“PHP能做什么”一节中将获得更多的信息。
如果对web编程感兴趣,也可以阅读简明教程。
10.
2.PHP能做什么?
PHP能做任何事。
PHP主要是用于服务端的脚本程序,因此可以用PHP来完成任何其它的CGI程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。
但PHP的功能远不局限于此。
PHP脚本主要用于以下三个领域:
∙服务端脚本。
这是PHP最传统,也是最主要的目标领域。
开展这项工作需要具备以下三点:
PHP解析器(CGI或者服务器模块)、web服务器和web浏览器。
需要在运行web服务器时,安装并配置PHP,然后,可以用web浏览器来访问PHP程序的输出,即浏览服务端的PHP页面。
如果只是实验PHP编程,所有的这些都可以运行在自己家里的电脑中。
请查阅安装一章以获取更多信息。
∙命令行脚本。
可以编写一段PHP脚本,并且不需要任何服务器或者浏览器来运行它。
通过这种方式,仅仅只需要PHP解析器来执行。
这种用法对于依赖cron(Unix或者Linux环境)或者TaskScheduler(Windows环境)的日常运行的脚本来说是理想的选择。
这些脚本也可以用来处理简单的文本。
请参阅 PHP的命令行模式以获取更多信息。
∙编写桌面应用程序。
对于有着图形界面的桌面应用程序来说,PHP或许不是一种最好的语言,但是如果用户非常精通PHP,并且希望在客户端应用程序中使用PHP的一些高级特性,可以利用PHP-GTK来编写这些程序。
用这种方法,还可以编写跨平台的应用程序。
PHP-GTK是PHP的一个扩展,在通常发布的PHP包中并不包含它。
如果对PHP-GTK感兴趣,请访问其» 网站以获取更多信息。
PHP能够用在所有的主流操作系统上,包括Linux、Unix的各种变种(包括HP-UX、Solaris和OpenBSD)、MicrosoftWindows、MacOSX、RISCOS等。
今天,PHP已经支持了大多数的web服务器,包括Apache、MicrosoftInternetInformationServer(IIS)、PersonalwebServer(PWS)、Netscape以及iPlantserver、OreillyWebsiteProServer、Caudium、Xitami、OmniHTTPd等。
对于大多数的服务器,PHP提供了一个模块;还有一些PHP支持CGI标准,使得PHP能够作为CGI处理器来工作。
综上所述,使用PHP,可以自由地选择操作系统和web服务器。
同时,还可以在开发时选择使用面对过程和面对对象,或者两者混和的方式来开发。
尽管PHP4不支持OOP所有的标准,但很多代码仓库和大型的应用程序(包括PEAR库)仅使用OOP代码来开发。
PHP5弥补了PHP4的这一弱点,引入了完全的对象模型。
使用PHP,并不局限于输出HTML。
PHP还能被用来动态输出图像、PDF文件甚至Flash动画(使用libswf和Ming)。
还能够非常简便的输出文本,例如XHTML以及任何其它形式的XML文件。
PHP能够自动生成这些文件,在服务端开辟出一块动态内容的缓存,可以直接把它们打印出来,或者将它们存储到文件系统中。
PHP最强大最显著的特性之一,是它支持很大范围的数据库。
用户会发现利用PHP编写数据库支持的网页简单得难以置信。
目前,PHP支持如下数据库:
∙AdabasD
∙dBase
∙Empress
∙FilePro(只读)
∙Hyperwave
∙IBMDB2
∙Informix
∙Ingres
∙InterBase
∙FrontBase
∙mSQL
∙DirectMS-SQL
∙MySQL
∙ODBC
∙Oracle(OCI7和OCI8)
∙Ovrimos
∙PostgreSQL
∙SQLite
∙Solid
∙Sybase
∙Velocis
∙Unixdbm
同时还有一个叫做PDO的数据库抽象扩展库使得可以自由地使用该扩展库支持的任何数据库。
另外,PHP还支持ODBC,即OpenDatabaseConnectionStandard(开放数据库连接标准),因此可以连接任何其它支持该世界标准的数据库。
PHP还支持利用诸如LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows环境)等不计其数的协议的服务。
还可以开放原始网络端口,使得任何其它的协议能够协同工作。
PHP支持和所有web开发语言之间的WDDX复杂数据交换。
关于相互连接,PHP已经支持了对Java对象的即时连接,并且可以将他们自由的用作PHP对象。
甚至可以用我们的CORBA扩展库来访问远程对象。
PHP具有极其有效的文本处理特性,支持从POSIX扩展或者Perl正则表达式到XML文档解析。
为了解析和访问XML文档,PHP4支持SAX和DOM标准,也可以使用XSLT扩展库来转换XML文档。
PHP5基于强健的libxm2标准化了所有的XML扩展,并添加了SimpleXML和XMLReader支持,扩展了其在XML方面的功能。
另外,还有很多其它有趣的扩展库。
例如mnoGoSearch搜索引擎函数、IRC网关函数、多种压缩工具(gzip、bz2、zip)、日历转换、翻译……
由于在这里无法列出PHP所有的特性和可提供的便利,请参阅安装以及函数参考有关章节以获取关于这里提到的扩展库更多的信息。
3.PHP从HTML中分离
当PHP解析一个文件时,会寻找开始和结束标记,标记告诉PHP开始和停止解释其中的代码。
此种方式的解析可以使PHP嵌入到各种不同的文档中,凡是在一对开始和结束标记之外的内容都会被PHP解析器忽略。
大多数情况下PHP都是嵌入在HTML文档中的,如下例所示。
This is going to be ignored.
php echo 'While this is going to be parsed.'; ?
>
This will also be ignored.
还可以用更高级的结构:
Example#1高级分离术
php
if ($expression) {
?
>
This is true.
php
} else {
?
>
This is false.
php
}
?
> 上例可正常工作,因为当PHP碰到结束标记?
>时,就简单地将其后的内容原样输出(除非其后紧接着一个新行,参见指令分隔符 )直到碰到下一个开始标记为止。
当然,上面的例子很做作,但是对输出大块的文本而言,脱离PHP解析模式通常比将所有内容用 echo() 或者print() 输出更有效率。
可以在PHP中使用四对不同的开始和结束标记。
其中两种,
php?
>和总是可用的。
另两种是短标记和 ASP 风格标记,可以在php.ini 配置文件中打开或关闭。
尽管有些人觉得短标记和 ASP 风格标记很方便,但移植性较差,通常不推荐。
Note:
此外注意如果将PHP嵌入到XML或XHTML中则需要使用
php?
>以保持符合标准。
Example#2PHP开始和结束标记
1.
php echo 'if you want to serve XHTML or XML documents, do like this'; ?
>
2.
echo 'some editors (like FrontPage) don't
like processing instructions';
3.
echo 'this is the simplest, an SGML processing instruction'; ?
>
= expression ?
> This is a shortcut for "
echo expression ?
>"
4. <% echo 'You may optionally use ASP-style tags'; %>
<%= $variable; # This is a shortcut for "<% echo . . ." %>
上例中的1和2总是可用的,其中1是最常用,并建议使用的。
短标记(上例3)仅在通过 php.ini 配置文件中的指令short_open_tag打开后才可用,或者在PHP编译时加入了 --enable-short-tags 选项。
ASP 风格标记(上例4)仅在通过 php.ini 配置文件中的指令asp_tags打开后才可用。
Note:
在以下情况应避免使用短标记:
开发需要发行的程序或者库,或者在用户不能控制的服务器上开发。
因为目标服务器可能不支持短标记。
为了代码的移植及发行,确保不要使用短标记。
4.PHP指令分隔符
同C或Perl一样,PHP需要在每个语句后用分号结束指令。
一段PHP代码中的结束标记隐含表示了一个分号;在一个PHP代码段中的最后一行可以不用分号结束。
如果后面还有新行,则代码段的结束标记包含了行结束。
php
echo "This is a test";
?
>
php echo "This is a test" ?
>
php echo 'We omitted the last closing tag';
Note:
文件末尾的PHP代码段结束标记可以不要,有些情况下当使用 include() 或者 require()时省略掉会更好些,这样不期望的白空格就不会出现在文件末尾,之后仍然可以输出响应标头。
在使用输出缓冲时也很便利,就不会看到由包含文件生成的不期望的白空格。
5.PHP注释
PHP支持C,C++和UnixShell风格(Perl风格)的注释。
例如:
php
echo "This is a test"; // This is a one-line c++ style comment
/* This is a multi line comment
yet another line of comment */
echo "This is yet another test";
echo 'One Final Test'; # This is a one-line shell-style comment
?
>
单行注释仅仅注释到行末或者当前的PHP代码块,视乎哪个首先出现。
这意味着在 //...?
>或者 #...?
> 之后的HTML代码将被显示出来:
?
>跳出了PHP模式并返回了HTML模式,// 或 # 并不能影响到这一点。
如果启用了asp_tags配置选项,其行为和 //%> 或 #%> 相同。
不过, 标记在单行注释中不会跳出PHP模式。
This is an
php # echo "simple";?
> example.
The header above will say 'This is an example'.
C风格的注释在碰到第一个 */ 时结束。
要确保不要嵌套C风格的注释。
试图注释掉一大块代码时很容易出现该错误。
php
/*
echo "This is a test"; /* This comment will cause a problem */
*/
?
>
6.PHP变量简介
PHP支持8种基本的数据类型。
四种标量类型:
∙boolean (布尔型)
∙integer (整型)
∙float (浮点型,也称作 double)
∙string (字符串)
两种复合类型:
∙array (数组)
∙object (对象)
最后是两种特殊类型:
∙resource (资源)
∙NULL (NULL)
为了确保代码的易读性,本手册还介绍了一些伪类型:
∙mixed
∙number
∙callback
以及伪变量 $....
可能还会读到一些关于“双精度(double)”类型的参考。
实际上double和float是相同的,由于一些历史的原因,这两个名称同时存在。
变量的类型通常不是由程序员设定的,确切地说,是由PHP根据该变量使用的上下文在运行时决定的。
Note:
如果想查看某个表达式的值和类型,用 var_dump()。
如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()。
要查看某个类型,不要用 gettype(),而用 is_type 函数。
以下是一些范例:
php
$a_bool = TRUE; // a boolean
$a_str = "foo"; // a string
$a_str2 = 'foo'; // a string
$an_int = 12; // an integer
echo gettype($a_bool); // prints out:
boolean
echo gettype($a_str); // prints out:
string
// If this is an integer, increment it by four
if (is_int($an_int)) {
$an_int += 4;
}
// If $bool is a string, print it out
// (does not print out anything)
if (is_string($a_bool)) {
echo "String:
$a_bool";
}
?
>
如果要将一个变量强制转换为某类型,可以对其使用强制转换或者 settype() 函数。
注意变量根据其当时的类型在特定场合下会表现出不同的值。
更多信息见类型戏法。
此外,你还可以参考PHP类型比较表看不同类型相互比较的例子。
7.PHP布尔类型
布尔类型
这是最简单的类型。
boolean 表达了真值,可以为 TRUE 或 FALSE。
Note:
布尔类型是PHP4引进的。
语法
要指定一个布尔值,使用关键字 TRUE 或 FALSE。
两个都不区分大小写。
php
$foo = True; // assign the value TRUE to $foo
?
>
通常你用某些运算符返回 boolean 值,并将其传递给控制流程。
php
// == 是一个操作符,它检测两个变量是否相等,并返回一个布尔值
if ($action == "show_version") {
echo "The version is 1.23";
}
// 这样做是不必要的...
if ($show_separators == TRUE) {
echo "
";
}
// ...因为可以使用下面这种简单的方式:
if ($show_separators) {
echo "
";
}
?
>
转换为布尔值
要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。
但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。
参见类型戏法。
当转换为 boolean 时,以下值被认为是 FALSE:
∙the 布尔值 FALSE 自身
∙the 整型值0(零)
∙the 浮点型值0.0(零)
∙空 字符串,以及 字符串 "0"
∙不包括任何元素的数组
∙不包括任何成员变量的对象(仅PHP4.0适用)
∙特殊类型 NULL (包括尚未设定的变量)
∙从没有任何标记(tags)的XML文档生成的SimpleXML 对象
所有其它值都被认为是 TRUE(包括任何资源)。
Warning
-1 和其它非零值(不论正负)一样,被认为是 TRUE!
php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?
>
8.PHP整型
整型
一个 integer 是集合Z={...,-2,-1,0,1,2,...}中的一个数。
参见
∙任意长度整数/GMP
∙浮点数
∙任意精度数学库/BCMath
语法
整型值可以使用十进制,十六进制或八进制表示,前面可以加上可选的符号(-或者+)。
八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x。
Example#1整数文字表达
php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
?
>
整型(integer)的形式描述:
decimal:
[1-9][0-9]*
|0
hexadecimal:
0[xX][0-9a-fA-F]+
octal:
0[0-7]+
integer:
[+-]?
decimal
|[+-]?
hexadecimal
|[+-]?
octal
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32位有符号)。
PHP不支持无符号整数。
Integer值的字长可以用常量PHP_INT_SIZE来表示,自PHP4.4.0和PHP5.0.5后,最大值可以用常量PHP_INT_MAX来表示。
Warning
如果向八进制数传递了一个非法数字(即8或9),则后面其余数字会被忽略。
Example#2八进制数的怪事
php
var_dump(01090); // 八进制 010 = 十进制 8
?
>
整数溢出
如果给定的一个数超出了 integer 的范围,将会被解释为 float。
同样如果执行的运算结果超出了 integer 范围,也会返回 float。
php
$large_number = 2147483647;
var_dump($large_number);
// 输出为:
int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// 输出为:
float(2147483648)
// 同样也适用于十六进制表示的整数:
从 2^31 到 2^32-1:
var_dump( 0xffffffff );
// 输出:
float(4294967295)
// 不适用于大于 2^32-1 的十六进制表示的数:
var_dump( 0x100000000 );
// 输出:
int(2147483647)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number);
// 输出:
float(50000000000)
?
> Warning
不幸的是PHP中有个bug,因此当有负数参与时结果并不总是正确。
例如当运算 -50000*$million 时结果是 -429496728。
不过当两个运算数都是正数时就没问题。
这个问题已经在PHP4.1.0中解决了。
PHP中没有整除的运算符。
1/2 产生出 float 0.5。
可以总是舍弃小数部分,或者使用round() 函数。
Thereisno integer divisionoperatorinPHP. 1/2 yieldsthe float0.5.