PHP新手上路(十)

 更新时间:2016年11月25日 17:16  点击:2158
9. 简易banner动态更替
  不知大家有没有发现各大站点上的标头广告banner,我们每次访问这些站点时,都会看到不同的广告图标,或者如果你每次刷新页面时,这些广告banner就会不断地随机更替变换。要实现这种效果虽然用javascript也可以达到(象天极网站的动态变换广告banner就是通过调用javascript来实现的),但是如果我们用PHP的话,我们还可以结合数据库来做数据量很大,如每日一题之类的功能。费话少说,让我们立即来看看如何用PHP来实现banner的动态更替功能。
简易banner动态更替PHP文件(banner.php3):
<?
//产生随机数
srand((double)microtime()*1000000);
//在0和4之间取一个数字
$randval = rand(0,5);
// 显示结果
echo "<a href=//gophp.heha.net/index.html><img alt=进入php的世界 border=0 src=$randval.gif></a>";
?>
  我们可以发现,实现的程序非常简单:主要是先利用srand这一初始化随机数产生器产生随机数,再调用rand函数在定义的有效范围内来获取其中一个随机值,最后显示$randval.gif各图片banner,即0.gif、1.gif、2.gif、3.gif或4.gif。为了便于大家理解,我将rand函数的语法及相关说明罗列如下:
rand
语法:int rand([int min], [int max]);
返回值:整数
函数种类:数学运算
内容说明:本函数用来取得随机值。若没有指定随机数的最大及最小范围,本函数会自动地从0到RAND_MAX中取一个随机数。若有指定min及max的参数,则从指定参数中取一数字。例如rand(38,49)则会从38到49之间取得一个随机值。其中UNIX系统包含49,Win32系统不包含49。值得注意的是为了使随机数的随机率最大,每次在取随机数前最好使用srand()来设定新的随机数。在本例中在用srand()来产生新的随机数时加入了时间因素,执行时以百万分之一的随机率来产生随机数
9.1 我们更改head.inc文件以应用该简易banner动态更替功能,同时还得为不同的广告banner链接到它们对应的网址。
  当然,首先我们必须先准备好用于更换交换的banner图标,同时也给我们的页面标头加上自己网站的徽标(01DC.gif)。
新的标头文件(header.inc):
<?
// 定义通用页面头部
?>
<HTML>
<HEAD>
<TITLE> <? echo "$MySiteName - $title"; ?> </TITLE>
PHP的面向对象编程:开发大型PHP项目的方法(五)
作者:Luis Argerich 译者:limodou
使用类进行数据存储
  对于PHP和OOP一件非常好的事情就是,你可以很容易地定义一个类来操作某件事情,并且无论何时你想
用的时候都可以调用相应的类。假设你有一个HTML表单,用户可以通过选择产品ID号来选择一个产品。在数
据库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不同类型的产品,并且同一个动作
可能对不同的产品具有不同的意思。例如,显示一个声音可能意味着播放它,但是对于其它种类的产品可能
意味着显示一个存在数据库中的图片。你可以使用OOP或PHP来减少编码并提高质量:
  定义一个产品的类,定义它应该有的方法(例如:显示),然后定义对每一种类型的产品的类,从产品
类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按你的想法动作。
  根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id, type, price,
description, 等等字段)...然后在处理脚本中,你可以从数据库中取出type值,然后实例化一个名为type
的对象:
--------------------------------------------------------------------------------
<?php
$obj=new $type();
$obj->action();
?>--------------------------------------------------------------------------------
  这是PHP的一个非常好的特性,你可以不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用
这个技术,你不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。
  这个功能很强大,只要定义方法,而不去考虑所有对象的类型,在不同的类中按不同的方法实现它们,然后在主脚本中对任意对象使用它们,没有if...else,也不需要两个程序员,只有高兴。
  现在你同意编程是容易的,维护是便宜的,可重用是真的吗?
  如果你管理一组程序员,分配工作就是很简单的了,每个人可能负责一个类型的对象和处理它的类。
  可以通过这个技术实现国际化,根据用户所选的语言字段应用相应的类就可以了,等等。
拷贝和克隆
  当你创建一个$obj的对象时,你可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一
个引用),所以它具有$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类一样的一个新
第1章    PHP3 入门
什么是PHP3?
    PHP3.0版本是一种服务器端HTML-嵌入式脚本描述语言。
PHP3能做什么?
    也许PHP3最强大和最重要的特征是他的数据库集成层,使用它完成一个含有数据库功能的网页是不可置信的简单。目前支持下面所列的数据库。
Oracle
Adabas D
Sybase
FilePro
MSQL
Velocis
MySQL
Informix
Solid
dBase
ODBC
Unix dbm
PostgreSQL
 
PHP的简要历史
    PHP从1994年秋天开始孕育,他的创始人是Rasmus Lerdorf。早期没有发布的版本是被他用在自己的网页上来跟踪有谁来参观过他的在线个人简历。被其他人使用的第一个版本是在1995年发布的,当时叫做Personal Home Page Tools。他包含了一个非常简单的语法分析引擎,只能理解一些指定的宏和一些Home Page后台的常见功能,如留言本,计数器和一些其他的素材。在1995年中期,重写了这个语法分析引擎并且命名为PHP/FI 2.0版本。FI来源于Rasmus所写的另一个可以接受Html表单数据的程序包。他组合了Personal Home Page Tools 脚本和Form Interpreter,并且加入了对mSQL的支持,于是PHP/FI 2.0诞生了。PHP/FI以惊人的速度发展,并且其他的人也开始对他的源码加以改进和修改。
    很难给出任何精确的统计数字,但是据估计到1996年末至少有15,000个WEB站点在使用PHP/FI 2.0,到了1997年中,这个数字已经成长为50,000个,1997年中PHP的发展也已经有了一些变化,他已经从Rasmus的宠物项目变成了更加有组织的团体项目。语法分析引擎也由Zeev Suraski 和 Andi Gutmans进行了重新改写,这个引擎构成了PHP3的基础。PHP/FI中的大部分通用代码都经过改写后引入了PHP3中。
    今天(1998年中),有许多商业的产品如C2's StrongHold web server和Red Hat Linux都开始支持PHP3或PHP/FI,根据由NetCraft提供的数字进行保守的推断,现在在世界各地大概有150,000个WEB站点在使用PHP或PHP/FI。从前景上看,在InterNet上这些站点远远比运行Netscape's flagship Enterprise server的要多。
使用PHP3进行HTTP认证
    只有在PHP以Apache的模块方式运行的时候才可以使用HTTP认证的功能。在Apache的模块PHP脚本中,可以使用Header()函数向客户断浏览器发送一个”Authentication Required”的消息,使浏览器弹出一个用户名/密码(username/password)的输入窗口,当用户输入用户名和密码后,包含PHP脚本的URL将会被再次调用,使用分别代表用户名,密码,和确认方式的$PHP_AUTH_USER, $PHP_AUTH_PW,$PHP_AUTH_TYPE变量。现在只有”BASIC”的确认方式被支持。
Php5.0说明 ------为面向对象而生的php5
为面向对象而生的PHP5
---------------------------------------------
[摘要]目前开发中的PHP5,其面向对象的机能已经被大幅度的强化了。下一代的PHP将会是怎样的一种语言呢?下面我们来详细讲解一下目前发布的PHP5的beta release。
(一) Zend 2.0的诞生
现在的PHP4所使用的基本文法是被称之为Zend 引擎的脚本编译引擎。这个就是PHP4的优良机能的原因之一,是作为对PHP3的改进而生成的一种语言。大家一直认为,PHP4的性能根据当初的目标,比PHP3有了很大的提升,在网络编程的世界里占据了很大的份额。
开发了Zend 引擎的Zend公司是在开发PHP4的同时,由PHP3的主要开发者Zeev Suraski和Andi Gutmans所创立的企业合并而来的。Zend的名称是由Zeev和Andi的名字合起来组成的。Zend公司的商业模式是,持续不断的为open source提供zend 引擎的PHP内核 (core),同时提升周边产品开发和贩卖的利益。以open source software作为基盘的商业,在世界范围内大多数正在苦战的企业中,算是比较好的典型例子了。
■PHP4的局限
托PHP4成功的福,这个用途的适用范围逐渐变广起来。作为企业级的用途而使用PHP的说法时有所闻。因此,就有了这样一个问题,构筑大规模网站的时候,代码的再利用性十分差。具体来说就是,PHP4的面向对象性能很弱,因此习惯于使用Java等的技术人员对此有很多的抱怨。
逐步的改善PHP4的面向对象的性能,大幅度的更改基本文法,开发者达成了更新PHP记述方法的开拓目的。
■Zend 2.0开始开发
随后,Zend公司PHP中心的开发者们在2001年7月发表了作为下一代PHP语言引擎的Zend 2.0引擎的构想。以[Zend Engine version 2.0: Feature Overview and Design]
(http://www.zend.com/engine2/ZendEngine-2.0.pdf)作为目标的同时,面向对象的性能大幅度的强化了。
目前的PHP4 Zend 引擎的扩张情况与昔日的PHP3如出一辙。这就意味着,要提升新的语言引擎的主版本号,明确方法目标,迎接来自开发团体的称赞。
Ze2的开发,与以往的Zend引擎一样,都是运行在open source的模式下的。最新的源代码在CVS上被全面的公开,因为是面向开放的开发者的,关于开发的议论非常的活跃。
现在Ze2被决定采用于PHP的下一个版本PHP5中。最终发布的时间现在还未定,但是假如根据Zend公司2003年4月1日发布的Newsletter的话,现在的应该就是Beta Release了。
程序控制
本章深入PHP内部,讲述如何使用函数、表达式和语句以实现对程序的控制。
前面的章节初步介绍了怎样操作数据,如果我们将操作数和操作符看作是构筑元件的话,那么它们组合起来即可形成表达式。进一步讲,表达式可以构成语句,语句用于组成函数,而函数则可用来组成程序。
提示:在学习有关编程语言的基本元素时,从全局理解--即理解这些元素是如何组成一个完整程序的--可能非常困难。但也不必着急,乐观一点。接下来的章节将逐步的显示整个程序,并且一点一点的解释它们是如何构造的。
4.1 表达式
当操作数和操作符组合到一起时,它们即组成表达式。本书的例子中已经展示了许多表达式,然而直到现在,我们才开始将注意力集中在它们身上。
表达式是由一个或多个操作符连接起来的操作数,用来计算出一个值--标量或数组。
最基本的表达式就是数字:
12
从这个简陋的开始,将逐步讨论越来越复杂的表达式:
-12
-12 + 14
-12 + 14 * (24 / 12)
(-12 + 14 * (24 / 12))&& calculate_total_cost()
注意每个表达式,在不考虑复杂性的情况下,每一个表达式事实上是由较小的表达式和一个或多个操作数共同组成的。当计算机编程者使用要定义的概念为该概念下定义时,这称为递归。当一个递归完成时,表达式能被分成较更简单的部分,直到计算机能完全的执行每一部分。
4.1.1 简单表达式
简单表达式是由一个单一的赋值符或一个单一函数调用组成的。由于这些表达式很简单,所以也没必要过多讨论。下面是一些例子:
* initialize_pricing_rules() -- 调用函数。
* $str_first_name = 'John' -- 初始化标量。
* $arr_first_names = array( 'John', 'Marie') -- 初始化数组。
4.1.2有副作用的简单表达式
表达式在它的主要任务之外,还有其它的副作用。当一个或几个变量改变了它们的值,并且这些改变并不是赋值操作符的操作结果时,就会出现这种副作用。例如,一个函数调用可以设置全局变量(全局变量是指在函数内部用global关键字来指定的变量),或者加一操作符也可以改变变量的值。副作用会使得程序很难读懂,因此编程的一个目标就是应该尽可能地减少这种副作用。
不使用global关键字是避免副作用的一个好选择。
让我们看看以下有副作用的表达式例子:
* $int_total_glasses = ++$int_number_of_glasses
[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
  • php有序列表或数组中删除指定的值的实现代码

    这篇文章主要介绍了php有序列表或数组中删除指定的值的实现代码,删除给定的值之后,得到一个新的有序列表,长度-1,下面是具体的实现方法...2021-08-22
  • PHP简单实现生成txt文件到指定目录的方法

    这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
  • php判断邮箱地址是否存在的方法

    这篇文章主要介绍了php判断邮箱地址是否存在的方法,php判断邮箱地址是否存在的方法有两种,感兴趣的朋友可以参考一下...2016-02-18
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03