当前位置: 编程技术>php
本页文章导读:
▪PHP入门速成(1)
PHP简介 PHP是一种用于创建动态WEB页面的服务端脚本语言。如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访问者浏览到该页面时,服务端会首先对页面中的PH.........
▪PHP入门速成(3)
小结 通过以上三步,我们使用PHP快速地在单一页面上实现了表单显示和表单处理的功能。 设定Cookies PHP提供了强大的设定和读取Cookies的功能。在此,我们不想对Cookies进.........
▪建立灵巧结构的PHP程序
很早就想写这篇文章了,但一直没有时间完成它。不是说我来告诉大家如何做,我更希望本文只是做为一个引子,与大家来讨论关于如何建立一个有效地、灵活的网络应.........
[1]PHP入门速成(1)
来源: 互联网 发布时间: 2013-11-30
PHP简介
PHP是一种用于创建动态WEB页面的服务端脚本语言。如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器。但是与ASP或ColdFusion不同,PHP是一种源代码开放程序,拥有很好的跨平台兼容性。用户可以在Windows NT系统以及许多版本的Unix系统上运行PHP,而且可以将PHP作为Apache服务器的内置模块或CGI程序运行。
除了能够精确的控制WEB页面的显示内容之外,用户还可以通过使用PHP发送HTTP报头。用户可以通过PHP设置cookies,管理用户身份识别,并对用户浏览页面进行重定向。PHP具有非常强大的数据库支持功能,能够访问几乎目前所有较为流行的数据库系统。此外,PHP可以与多个外接库集成,为用户提供更多的实用功能,如生成PDF文件等。
用户可以直接在WEB页面中输入PHP命令代码,因而不需要任何特殊的开发环境。在WEB页面中,所有PHP代码都被放置在“< ?php”和“ ? >”中。此外,用户还可以选择使用诸如< SCRIPT LANGUAGE="php" >< /SCRIPT >等的形式。PHP引擎会自动识别并处理页面中所有位于PHP定界符之间的代码。
PHP脚本语言的语法结构与C语言和Perl语言的语法风格非常相似。用户在使用变量前不需要对变量进行声明。使用PHP创建数组的过程也非常简单。PHP还具有基本的面向对象组件功能,可以极大的方便用户有效组织和封装自己编写的代码。
PHP语法概述
A. 基本语法
即使初次接触PHP的用户也会发现自己对PHP的语法风格并不陌生。
例如:
< ?php
echo “Hello!”;
? >
显示结果为“Hello!”。
PHP中,所有的变量都以标识“$”开头。我们可以对上述代码做如下改动:
< ?php
$greeting = “Hello!”;
echo $greeting;
? >
改变后的代码显示结果不变。
PHP中使用“.”符号连接不同的字符串,而其它的算术运算符则继承了流行编程语言的风格。举例如下:
< ?php
$greeting = “Hello!”;
$num = 3 + 2;
$num++;
echo “$greeting $num people!”;
? >
显示结果为“Hello!6 people!”。
PHP对各种运算符及运算规则都有一套完整的规定,如果用户具有C或C++语言的编程背景的话,可以发现一切都得心应手。
与Perl语言一样,在PHP中,如果在双引号包含的字符串中含有变量的话,该变量将用相应的变量值替换;如果字符串被单引号包含,则不做替换。例如:
< ?php
$name = ‘PETER';
$greeting_1 = “Hello, $name!”;
$greeting_2 = ‘Hello, $name!';
echo “$greeting_1\n”;
echo “$greeting_2\n”;
? >
显示结果为:
Hello, PETER!
Hello, $name!
(注:上述代码中的“\n”为换行符,只能在双引号字符串下使用)
B. 变量
PHP允许用户象使用常规变量一样使用环境变量。例如,在页面http://www.nba.com/scores/index.html中包含如下代码:
< ?php
echo “[$REQUEST_URI]”;
? >
则输出结果为[/scores/index.html]
C. 数组
用户在使用PHP创建数组时,可以把数组索引(包括常规索引或关联索引)加入方括号中。例如:
$fruit[0] = ‘banana';
$fruit[1] = ‘apple';
$favorites['animal'] = ‘tiger';
$favorites['sports'] = ‘basketball';
如果用户在向数组赋值时不指明数组下标,PHP将自动把该对象加入到数组末尾。例如对于上述$fruit数组可以用以下方式赋值而保持结果不变,
$fruit[] = ‘banana';
$fruit[] = ‘apple';
同样,在PHP中,用户还可以根据需要建立多维数组。例如:
$people[‘David'][‘shirt'] = ‘blue';
$people[‘David'][‘car'] = ‘red';
$people[‘Adam'][‘shirt'] = ‘white';
$people[‘Adam'][‘car'] = ‘silver';
在PHP中,用户还可以使用array()函数快速建立数组。例如:
$fruit = array(‘banana',‘apple');
$favorites = array(‘animal' = > ‘tiger', ‘sports' = > ‘basketball');
或者使用array()函数创建多维数组:
$people = array (‘David' = > array(‘shirt' = > ‘blue','car' = > ‘red'),
‘Adam' = > array(‘shirt' = > ‘white',‘car' = > ‘silver'));
此外,PHP还提供了内置函数count()用于计算数组中的元素数量。例如:
$fruit = array(‘banana', ‘apple');
print count($fruit);
显示结果为2。
D. 结构控制
在PHP中,用户可以使用“for”或“while”等的循环结构语句。例如:
for ($i = 4; $i < 8; $i++) {
print “I have eaten $i apples today.\n”; }
或
$i = 4; while ($i < 8) {
print “I have eaten $i apples today.\n”;
$i++;
}
返回结果为:
I have eaten 4 apples today.
I have eaten 5 apples today.
I have eaten 6 apples today.
I have eaten 7 apples today.
此外,用户还可以使用“if”和“elseif”等的选择性结构语句。例如:
if ($user_count > 200) {
print “The site is busy right now!”;}
elseif ($user_count > 100) {
print “The site is active right now!”;
else {
print “The site is idle - only $user_count user logged on.”;
}
[2]PHP入门速成(3)
来源: 互联网 发布时间: 2013-11-30
小结
通过以上三步,我们使用PHP快速地在单一页面上实现了表单显示和表单处理的功能。
设定Cookies
PHP提供了强大的设定和读取Cookies的功能。在此,我们不想对Cookies进行过多的介绍,但是用户应当认识到在设计WEB应用的过程中Cookies可能起到的重要作用。
用户可以使用PHP提供的setcookie()函数创建或修改Cookie。setcookie()函数总共包括6个参数,能够对cookie进行精确的控制。
使用setcookie()函数设定cookie的最简单的方式为:
setcookie(‘name', ‘PETER');
这样,在用户访问整个站点页面的期间,PHP将会自动创建一个名为$name的变量,并将值PETER赋予该变量。我们把这种Cookie称做会话Cookie,即其作用域为用户的整个会话过程。
如果我们希望Cookie值在访问用户离开站点后仍然有效的话,可以使用setcookie()函数的相应参数,设定Cookie的有效期。这里,我们需要对PHP的时间设定进行一下说明。PHP是一种基于Unix开发出的技术,用户需要用自1970年1月1日之后的秒数表示当前时间。对于没有任何Unix系统编程经验的广大普通用户来说真是有点摸不着头脑。不过,大家大可不必担心,因为PHP为我们提供了一个非常简便的解决方式,即mktime()函数。用户可以在mktime()函数中按照小时、分、秒、月、日、年的顺序输入用户希望表示的时间,mktime()函数将会返回该时间距离1970年1月1日的秒数。举例来说,如果我们希望设定一个有效期持续到2000年的Cookie的话,可以使用如下方式:
< ?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name', ‘PETER', $y2k);
? >
如果用户希望更新已经存在的cookie,可以采用简单的直接覆盖原值的方法。例如,即使我们已经按照上述代码对cookie进行了设定,仍可以对其做以下改动:
< ?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name', ‘JEFF', $y2k);
? >
这里需要提醒用户注意的一点是,虽然我们对cookie值进行了修改,但是在没有加载经过修改的页面之前,PHP中$name变量的值仍然不会改变。如果用户希望在更改cookie值的同时更改 相应PHP变量的值,可以采用以下方式:
< ?php
$name = ‘JEFF';
$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name', $name, $y2k);
? > 在有效期参数之后,setcookie()函数提供了设置可以读取cookie值的页面的路径和域的参数。出于安全因素的考虑,在默认情况下,只有与设定cookie的页面处于同一目录或下属子目录的页面才能够读取相应cookie值。但是,根据需要,我们也可以对这一设定进行修改。例如:
< ?php
setcookie(‘name', ‘jeff', $y2k, ‘~/myhome', ‘.domain.com');
? >
通过上述代码,我们设定凡是位于~/myhome目录下,属于.domain.com域的页面都能够读取该cookie值。
setcookie()函数的最后一个参数较少被使用。该参数可以指定只向运行安全连接协议,如SSL,的WEB服务器返回cookie值。如果用户希望启动该参数功能,只需要将其值设为1即可。
使用PHP删除cookie也非常简便,用户只需要在setcookie()函数中输入希望删除的cookie的名称,PHP就会自瓿伤械纳境ぷ鳌@纾?
< ?php setcookie(‘name'); ? >
最后,关于cookie还要说明一点。考虑到HTTP协议中cookie的运作方式,用户一定要注意应当在显示任何文字之前发送所有的cookie设置。如果用户在编写代码时先设定显示的文字然后再发送cookie的话,PHP就会弹出报错信息,无法完成cookie的设置。举例来说:
< ?php
setcookie(‘name', ‘jeff');
echo “Hello Everyone!”;
? >
这种cookie设置的方式是正确的。但是如果采用如下方式:
< ?php
echo “Hello Everyone!”;
setcookie(‘name', ‘jeff');
? >
则会出现报错信息,无法完成cookie的设置。 日期和时
PHP提供了多种简便的功能以方便用户显示和控制日期和时间。
如果用户希望以某种形式显示某一日期或时间的话,可以使用PHP提供的date()函数。date().函数包括两个参数,分别用于设定日期的显示格式以及代表显示日期的时间戳,其中,时间戳必须采用距离1970年1月1日的秒数方式表示。如同C语言中的strftime()函数或Perl中的POSIX::strftime()函数,PHP中的date()函数具有非常多的格式设置选项,这里就不一一说明了。举例来说,date()函数的使用方式如下:
< ?php
$birthday_stamp = mktime(10,10,0,10,20,1975);
$birthday_formatted = date(‘F d, Y - g:i a',$birthday_stamp);
echo “Peter was born on $birthday_formatted.”
? >
显示结果为:Peter was born on October 10, 1975--10:10 p.m.
总结
PHP是一种快速创建动态WEB站点的强大工具,其熟悉的语法风格和源代码开放的特性能够使使用者在最短的时间内了解和掌握其功能并进而发挥出其巨大潜力。希望本文能够对广大读者有所启发。祝大家早日成为PHP高手。
[3]建立灵巧结构的PHP程序
来源: 互联网 发布时间: 2013-11-30
很早就想写这篇文章了,但一直没有时间完成它。不是说我来告诉大家如何做,我更希望本文只是做为一个引子,与大家来讨论关于如何建立一个有效地、灵活的网络应用程序。
经过了2-3年的网络应用程序开发工作,我的开发经验变得更加生动了,回过头来看我以前为Geocrawler写的代码,简直不敢相信这是我的。由于GPL的原因,在PHPBuilder中的源码也是良莠不齐的。
最近我做为一个有经验的PHP开发者,一直在帮着写SourceForge,我想这显示出了最终结果的一个范围。好的代码应被分成了多个部分,合适的库及函数调用,清楚的数据库结构,站点的每一个部分与其它部分都是相对独立的。
但是,这仍不是最好的。如果我可以重做,我将更多的关注于HTML层与数据层的分离,通过对象及清楚的函数库实现这一点。
优美的图形
我知道经理们喜欢用优美的图形及图表来描述它们,这将给我们留下最好的印象。用这种隐藏在一个结构后的想法,你可以把你的逻辑与外观分离,这意味着任何一个复杂的程序都可以用"API/Data Access Layer"来表述。
与其你把安全检测、更新的句子等放在HTML层中,不如把它们整体地放在你的API层里。而这个HTML层只含有简单的函数调用和返回的数组、对象或自定的其它什么,以及一些数据库的检索结果的集合等。
如果你这样做了,顶层将是非常的瘦小,你可以方便地创建及维护它。
如下的例子中,这个HTML接口中只有一些API层中的函数的直接调用,一些HTML工具库(它能生成一个弹出框等等),和一些从数据库抽象层中调用的数据库操作方法(你不需要绑定某一个特别的数据库)。 基础
灵活的PHP程序结构最基本的方面有以下几点:
数据库无关性
界面无关性
可移植性
面向对象或至少应由函数库组成
还有其它的?
当然还有一些其它的东西,但我认为那都是太大了,或许你自己能指出它们。
让我们详细地谈谈它们每一条吧。
1、数据库无关性
你从不知道你的站点将会在哪里运行,当然在你创建它时,你希望它变和得很大并且有很高的流量。所以你不想把你自己约束在 MS Access 上面或者其它什么轻便的数据库系统。虽然你不能立刻地插入各种不同的数据库系统,但是你有可能很方便地在它们中间切换。你有一些不同的选择可以把你的数据库调用抽象出来。在PHP中一个奇特的方法是你不得不为每个不同的数据库系统写出不同的代码,因为在PHP中对每一种不同的数据库的访问函数是不同的。为了避开这点,你可以使用一个抽象地数据库访问层,就象PHPLib、下一个版本的PEAR、及我们在SourceForge中描述的那样。
2、界面无关性
一个应用程序是它的技术更重要还是它所运行的站点更重要?我们并不能真正地知道。我从来不相信这一点--HTML是一个标准。特别是对于一个网络应用程序而言,界面发生了改动,意味着我们不得不总是重写。但是如果你的应用程序是很大很复杂的,你就要为你的数据库建立一些其它的接口了,只要你不想在你的站点程序中到处copy&paste你的访问检查等代码。这也意味着,如果你正确地设计了你的应用程序,你可以很容易地改写你的站点让它适应WAP,只要简单地写一个小的WAP界面,并让它调用你的数据库访问对象而已。但若你没有很好地设计你的程序,你把你的HTML版改成WAP版是一个复杂的工程。
我把这个想法也带入了SourceForge中,我们有一个巨大的用户群,为我们发送/接收bugs、任务等。首先,我们指出所有的这些将通过我们的web页面接口,然后,由于Eric Raymond 和其他人给的压力,我们决定用XML来做数据库的外部接口。
幸运的是我们曾在四月已把程序的核心逻辑代码与它的界面分离了。我将试着表达我们是如何做的,希望对你的工作有所帮助。
这个SourceForge的bugs跟踪器和其它的一些工具被分成两个库-这个HTML库和数据访问库。这个数据访问库检查输入的值的正确性,处理安全校验,并且当成功/失败时返回TRUE 或 FALSE。
由于简化的原因,这个例子并没有基于一个完善的对象模式,那样我还要解释这个基类和它的一些衍生类等等,我想这个例子将给你一个最普通的想法。 HTML 库的例子
//connect to database
require ("database.php");
//common utils like header/footer HTML
require ("html.php");
//data access library
require ("bug_data.php");
echo site_header("Page Title");
echo " Updating A Bug
";
if (bug_data_update($field1,$field2,$field3)) {
echo " Update Failed! ";
} else {
echo " Updated Bug Successfully ";
//echo the global error string
echo $feedback;
}
echo site_footer();
?>
Data 访问库的例子
3、可移植性
毫无疑问,你不想让你的代码只能用于一个固定的站点,将来我们可能改变色彩的选择、元素的名称、字体或其它一些什么,这样应设置一个config文件,它被多个页面所包含。更好的观点是你的站点被模块化,你不需要copy&paste任何一个HTML文件,我倾向于把这些放入一个函数,在任何需要的地方调用它们。
同样的方法可用于数据库的密码、数据库连接字串等,这些可以放入一个数据库处理的抽象层中。
4、面向对象/函数化
我们不是用COBOL开发,所以这意味着我们可以把进程分成多个函数的调用。每个调用都是一个自动的行为,有时仅仅是调用一小段其它的函数并返回这个结果。
一个好的例子是在每一个页面校验用户是否登录,你可以用cookie或查询数据库来完成这个功能,但一旦你想改变你的验证系统,你不得不改动每一个页面,其实你应该可以通过改动函数库里一个普通的函数就完成这个变动的。任何时候,你写一段代码,如果它将会被用于多于一个地方,你就要考虑把它放入一个库里了。
其它还有什么?
显然还有很多我没有谈到的事,告诉我你的想法,我将在下一篇文章中来讨论它们。特别地是,如果你写了一个大型的、复杂的应用程序,我想听听你是如何规划它的及你重做时不什么不同的想法。
最新技术文章: