Redian新闻
>
(原创)郎朗的计算机文学
avatar

(原创)郎朗的计算机文学

langlangname
1楼
(前言)大家好,又见面了,鸟之心魔郎朗是也,其实我一直没有透露我曾经2008年到2009年的时候在上海贝尔软件做过一年外派的软件工程师,拿着税后2500元的低薪在追求属于我自己的理想。其实,很多时候,写作跟计算机编程是有着共通性的,都需要坚持,都需要通过自己的努力来尝试实现自己的价值,到底PHP这一门编程语言对于我意味着些什么,其实我并不是非常想去尝试坚持,想要尝试通过echo来尝试输出自己曾经所犯过的所有错误,现实中的也好,还有虚幻的世界中的也罢,其实,很多时候,尝试忘记编程,尝试忘怀编程和写作应该必然产生的一些共通的东西,本来就是无法通过自己现实中的努力来尝试弥补的。每个人都渴望拥有一台属于自己的Web服务器来收容自己曾经所尝试过,修改过的很多网站的源代码,其实,现在网上很多开源的网站源代码,有些甚至有了代码的保护,这其实都不仅仅只是为了尝试保护版权或者是尝试想要保护自己现实中曾经努力过的编程结果,在现在的这个时代,写程序跟写作到底真正的共同点到底在哪里,其实,都是因为兴趣的驱使,同时也因为对于写作和对于编程的共通的兴趣,让整个世界的作家也好,程序员也罢,都能够通过这本书来尝试找到自己内心中真正所渴望中的那种样子。我们不仅仅只是因为尝试喜欢一门课程,计算机的也好,文学类的也罢,其实,计算机文学,看似好像有点不可能,但,这种不可能很多时候都是因为计算机和文学之间这种通过日积月累之后的堆积和积累之后,在程序员和作家的记忆深处烙印下很多看似能够忽略许久的东西。我们其实都应该通过我们自己的兴趣来找寻得到一些不一样的东西,同时,这本书就有点类似于我的计算机读书笔记一样,随时随地记录今天在计算机,在文学上的共通的收获,守候一件能够坚持许久的事,看似好像不可能,但其实,这种不可能,本来就仅仅只是因为我们都已经开始学会通过我们自己的努力来尝试改变得到这个现实中的生活。计算机给我们的现实生活带来了诸多的便利,同时也因为着计算机对于现实世界的贡献,让整个现实世界中的我们都开始学会感谢生活的同时,也不断地在感恩着我们现实中同样有点单调和乏味的计算机编程和单纯追求纯文学的那种枯燥感,也许,我们都应该通过我们自己现实中的努力来尝试找寻回我们身上那些跟计算机有关的东西,计算机编程对于作家到底意味着些什么,其实很多作家也在不断地摸索和研究中发现其实自己也可以通过文学的方式来成就一下自己能够成为编程者,作为开发人员的那种骄傲。其实,渴望一件事,曾经对计算机编程有过热情的我也许能够给大家带来点不一样的东西,同时也通过这种不一样,让我自己终于意识到,原来,意识深处,真正所渴望的那种东西,往往远远不如现实中自己对于文字,对于程序代码的那种渴望,那种渴求来得强烈。也许,我们都应该尝试说服自己相信其实我们的内心深处对于任何陌生的事物都是有着自己的考量和研究的。当然,也许,我们自己也应该学会通过书籍来更加充实地让自己充一会儿电,从复杂单调的现实的工作中发现其实热情可以很快地冲刷掉很多东西。郎朗的计算机文学相信能够伴随着大家一起成长,一起慢慢地继续成长起来,并让自己通过现实中自己的努力来不断地改善自己,完善自己的很多优缺点。同时,我们最后在反复读着书本中那些看似陌生的字眼的时候,我们也开始学会通过现实中我们自己的努力,来尝试找到这个世界中跟计算机,跟文学有关的那些东西。我们自己大脑中的数据库系统,也开始因为我们自己最刻意中的那个SELECT,最刻意中的那个DELETE,让我们终于发现,原来,很多时候,渴求一件事,对一件事有热情,一直都这样看似刻意,却也看似平凡着。计算机跟文学之间本身就能够存留有的关联,会通过我,通过电脑前的你,来尝试开启一条非常不同寻常的经历或者是冒险,大家,相信都会因为这本书而有所收获的。计算机文学,看似好像不可能,但,或许也是同样正常,同时也是同样另类的。尝试努力吸取过营养,至少必然也会有所收获,至少,在上海贝尔追求自己计算机理想的我对于我这本书的作用虽然不是很确信,但,我想,其实每个人都应该通过自己刻意坚持中的那些东西,来尝试让自己对自己更加有自信,有信心。计算机文学对于现实中的人们到底意味着些什么,其实坐在电脑前敲打这本书里面每个字句中的我其实并不是非常有确认。但,我想,或许,改变一件事的时候,也必然有尝试努力尝试做到一件事的时候,所必然经历过的那些平凡和那些烦恼。郎朗的计算机文学,伴随着复旦计算机信息管理自考本科这一件值得坚持许久的事,让我和你们都开始觉得,原来,我们也可以同样对于计算机和对于文学这么有热情,同时也这么敢于和勇于去这么坚持,去这么坚守下去。一直一直,直到我们彻底老去的时候,我们才终于发现,原来计算机,原来文学,看似好像很枯燥,但,却也一直这样在我们所认为的现实中变得更加有意义,更加有价值起来。这样以来,这本书的真正价值,就出现了,而且不会轻易消失在我们自己的记忆深处里,永永,伴随着远远。
avatar
langlangname
2楼
第一章(PHP)
PHP这门编程语言最开始的时候起源于1995年,一个名叫Rasmus Lerdorf的程序员开发了一个用Perl/CGI脚本编写的在线简历,这个脚本的作用是用来将访问这个在线简历的人员的信息写入日志(通过日志可以查看很多计算机当中的信息。)同时还能够显示这个网页访问者的数量(也就是提示你有多少人亲睐你的这一份在线简历。)。PHP(Personal Home Page个人主页)就是这样起源的,1997年11月发行了PHP 2.0,PHP其实从3.0版本开始全称正式改为PHP:超文本预处理器(PHP:Hypertext Preprocessor),PHP本来就可以用记事本这个程序来写,来阅读。没想到到发行3.0版本为止,已经有超过5万个用户在使用PHP改进其网页。其实,PHP不仅仅只是用来处理网页,在网站的开发过程中,使用PHP这一门语言的优势一直都很明显,而且,从未轻易改变和放弃过。到1999年初,两位核心开发人员(Zeev Suraski和Andi Gutmans)最终改写了PHP的解析器(也就是将PHP的代码解析为PHP网页),也就是所谓的Zend脚本引擎,这些工作最终导致了PHP4的发布。Zend是关于开发,部署和管理PHP应用的产品和服务的主要提供商。
PHP4添加了以下几项对该语言,对企业级应用来说的改进工作。
1:改进了资源处理,开始有很多企业尝试用PHP开发企业级网站。
2:面向对象的支持。其实所谓的对象,也就是现实世界中的所有东西。
3:内置的会话处理支持,这个特性使得开发人员可以相当高效率地跟踪用户活动和偏好。其实会话就相当于一次谈话,通过这次谈话,能够实现用户你愿意尝试做到的很多件事。
4:加密。亲密的人们之间都有着特定的语言来沟通,其他人是无法了解的。
5:ISAPI支持。能够将PHP与微软的IIS Web服务器结合使用。
6:内置COM/DCOM支持。其实这项功能也就是扩展了PHP与Windows应用程序的互操作性。
7:内置Java支持。PHP的应用程序能够绑定Java对象。
8:与Perl兼容的正则表达式(PCRE)库。
版本5是PHP语言发展历程中的另一座分水岭。
1. 极大地提高了面向对象能力。
2. try/catch异常处理。(try尝试/catch捕获)
3. 改进的XML和Web服务支持。
4. 对SQLite的内置支持。
PHP6的关键特性。
1. Unicode支持。(为了构建和维护多种语言的应用程序。)
2. 安全改进。
3. 新语言特性和构造。
全部的Apache安装中有40%都安装有PHP。说明PHP确实够流行,够疯狂。
1.September 23.2007的格式输出当前日期:
<?php echo date(“F j,Y”);?>
F代表月份,j代表日期,Y代表年份。
2.生成一个由5个字母或数字字符组成的字符串,如a3jh8:
$randomString=substr(md5(microtime(),0,5);
substr取字符串函数,md5加密函数。microtime(),返回当前时间的微秒数。
3<?php
$number=”5”; //$number是一个字符串。
$sum=15+$number;//添加一个整型和字符串用于生产出一个整型。
$sum=”twenty”; /将$sum覆盖为一个字符串。
?>
avatar
langlangname
3楼
PHP还会在脚本结束时自动撤销变量,将资源返回给系统。(就相当于借钱是一样的道理,有借有还,再借不难。)
PHP为25种以上的数据库产品提供了内置支持。
因为PHP开源软件(源代码可以供所有人共享,修改的软件)的出现,它和因特网就像面包和黄油一样密不可分。
PHP的优点之一是可以把PHP代码直接嵌入到HTML页面中。

Welcomeh3是html中标题的意思。
<?php <?php ?> 是PHP代码的开始和结束符。
echo “

Some dynamic output here

”;

是html中段落的意思。
?> echo打印输出的意思。

Some static output here


PHP还可以使用更短的界定(php语句跟html分离时候的标识。也就是你html显示你的,我php实现我的功能。)语法,也就是<? ?>,但是,要使用这个特性,需要启用PHP的short_open_tag指令。
PHP还支持另一种主流的界定形式,也就是类似于javascript这种显示风格的样子,
<script language=”php”> 先声明这个脚本使用的是php语言
print “This is another PHP example.”; print打印输出
</script>
Microsoft ASP以<%开头,以%>结束。PHP也同样支持这种显示的方式。
<%
print “This is another PHP example.”;
%>
但是从PHP6开始ASP风格的语法就被删去了。就像过气的明星被雪藏是一样的道理。
<html> html的开头标记
<head> 在<head></head>之内的,是head信息,head信息在浏览器浏览页面的时候是看不到的。
<title> html标题
<?php echo “Welcome to my Website”;?> </title>
</head>
<body> html文档主体
<?php
$date=”July 26,2007”; 声明一个变量$date
?>

Today’s date is<?=$date;?>

在<?= ?>中使用这个变量$date
</body>
</html>
当然,写PHP代码时,要为代码添加充分的注释。其实是为了方便以后的继续使用,继续修改。
PHP支持C++的单行注释语法,以双斜线(//)开头。
<?php
//Title: My first PHP script
//Author: Jason
echo “This is a PHP program”;
?>
PHP还支持另一种C++风格的单行语法,称为shell语法,它以#符号开头。
<?php
#Title: My PHP program
#Author: Jason
echo “This is a PHP program”;
?>
phpDocumentor是一个促进文档处理的开源项目。它将嵌在源代码中的注释转换为各种易读的格式。包括HTML和PDF。
PHP还支持一种多行形式的注释,同时标注注释的开始和结束。
<?php
/*
Title:My PHP Program
Author:Jason
Date: July 26,2007
*/
?>
avatar
langlangname
4楼
print()语句把传入它的数据输出到浏览器,就像人们通过打印机输出文字是一样的道理,其形式为:
int print(argument) int返回的类型是整数型,argument是传入的参数。
<?php
print(“

I love the summertime.

”);
?>
<?php
$season=”summertime”;
print “

I love the $season.

”;
?>
<?php
print “

I love the summertime.

”;
?>
以上这些语句都能够生成同样的输出如下,其实这三条语句本来就是差不多的,实现了一样的功能。
I love the summertime.
echo()能够输出多个字符串。
<?php
$heavyweight=”Lennox Lewis”;
$lightweight=”Floyd Mayweather”;
echo $heavyweight, “and”,$lightweight,”are great fighters.”;
?>
这个代码会生成以下输出:
Lennox Lewis and Floyd Mayweather are great fighters.
其实也就是通过echo语句将这几个变量中的字符串都合在一起打印输出了而已。
echo()和print()相比,echo()函数稍稍快一点,因为echo()函数什么都不返回,而print()不同,如果这个语句成功地输出,它会返回1。
printf()语句将静态数据和动态数据清晰地分至两个不同的部分,从而可以轻松地维护。
boolean printf(string format [,mixed args]) format是字符串类型的,args是混合类型的。
printf(“Bar inventory: %d bottles of tonic water.”,100);
执行这个命令会生成以下输出:
Bar inventory: 100 bottles of tonic water. (使用了printf函数后,%d其实被100给替换掉了。)
当然,printf()语句也可以同时传入两个值,就比如整数值和浮点数值,
printf(“%d bottles of tonic water cost $%f”, 100 , 43.20);
执行这个命令会生成以下输出:
100 bottles of tonic water cost $43.20 (%d被100给替换, %f被43.20替换)
处理小数值时,可以使用一个精度指示符调整精度,例如,
printf(“$%.2f”,43.2); // 显示为43.20
sprintf()函数的功能与printf()相同,但它将输出指派到字符串,而不是直接指派到浏览器,其形式如下,
string sprintf(string format[,mixed arguments])
$cost=sprintf(“$%.2f”,43.2); // $cost=$43.20 变量$cost最后指向到$43.20。
avatar
langlangname
5楼
PHP中常见的数据类型包括布尔型,整型,浮点型,字符串型和数组,还有对象。
标量(scalar)数据类型的变量能够保存单项信息,以下都属于标量数据类型,布尔型,整型,浮点型和字符串型。
布尔变量(两种可能,要么是真实的,要么就是虚假的。)表示真实性,只支持两个值,TRUE(真)或FALSE(假),不区分大小写。另一方面,也可以使用0来表示FALSE,非0值表示TRUE。
$alive=false; //$alive is false.
$alive=1; // $alive is true.
$alive=-1; // $alive is true.
$alive=5; // $alive is true.
$alive=0; // $alive is false.
PHP支持以十进制数(基数为10),八进制数(基数为8)和十六进制数(基数为16)表示的整数值。
42 //decimal十进制
-678900 //decimal十进制
0755 //octal 八进制
0XC4E //hexadecimal 十六进制
浮点数,也称为双精度数(double)或实数(real number),可以指定包含小数部分的数,浮点数用于表示货币值,重量,距离,以及用简单的整数无法满足要求的其他表示。
字符串是一个连续的字符序列。这样的组通常用单引号或双引号来界定。
下面是一些有效的字符串例子:
“PHP is a great language”
“whoop-de-do”
‘*9subway\n’ (之所以用单引号就是代表按照原来的样子进行输出)
“123$%^789”
当然,也可以将字符串当作数组来访问和显示某个字符。
$color=”maroon”;
$parser=$color[2]; // 将$color中的第三个字符r赋值给$parser
复合数据类型可以用于将多个相同类型的项聚集起来,表示为一个实体。这包括数组(array)和对象(object)。
Array正式的定义是有索引的数据值集合。每个数组索引(也成为键(key))引用一个对应的值。索引其实就是一个简单的数,指示某个值在系列中的位置,也可以与值有某种直接关联。
例如,如果要创建美国各州的列表,可以使用数字索引的数组,如下:
$state[0]=”Alabama”;
$state[1]=”Alaska”;
$state[2]=”Arizona”;
...
$state[49]=”Wyoming”;
如果项目要求将美国各州与其州府相关联,这个时候使用关联索引。
$state[“Alabama”]=”Montomery”;
$state[“Alaska”]=”Juneau”;
$state[“Arizona”]=”Phoenix”;
...
$state[“Wyoming”]=”Cheyenne”;
在PHP中,对象这种数据类型必须显式地进行声明。(就像性格直接的人与人之间的交流是一样的,性格直接的人喜欢直来直去地说话。)
Class Appliance { 声明一个Appliance类
private $_power; 声明一个私有成员$_power
function setPower($status) { 声明一个setPower函数,传入$status参数
$this->_power=$status; $this指针将私有成员$_power指向变量$status
}
}
$blender=new Appliance; //声明$blender为Appliance类的新的对象。
可以使用方法setPower()来设置blender对象的power属性。
$blender->setPower(“on”);
avatar
langlangname
6楼
PHP中的类型强制转换也就是将一个变量强制转换为与原来类型不同的另一种类型。(强扭的瓜不甜,但是在PHP的类型转换中,强扭的瓜还是甜的,可以这样来理解。)
例子,将一个整数转换为双精度数。
$score=(double)13; //这样一来$score就等于13.0
将一个双精度数强制转换为整数。
$score=(int)14.8 //$score=14
将一个字符串数据类型转换为一个整数。
$sentence=”This is a sentence”;
echo (int)$sentence; // 返回0
当将一个数据类型强制转换为数组中的一个成员时,所转换的值将成为数组中的第一个成员。(当品质极好的我强迫你跟我谈朋友的时候,你很快就会发现你是我的第一个女朋友。)
$score=1114;
$scoreboard=(array)$score;
echo $scoreboard[0]; //$scoreboard[0]输出的是数组scoreboard中的第一个成员,结果输出为1114
任何数据类型都可以转换为对象,结果是,该变量成为了对象的一个属性。该属性名为scalar:
$model=”Toyota”;
$obj=(object)$model;
然后可以如下引用这个值:
print $obj->scalar; //返回”Toyota”
当然,PHP有时候会将变量自动转换为最适合的类型。
<?php
$total=5; //一个整型
$count=”15”; //一个字符串
$total +=$count; //$total=20(这个时候$total就自动转换为整型了。$total+=$count相当于$total=$total+$count;
<?php
$total=”45 fire engines”;
$incoming=10;
$total=$incoming +$total;
?>
//$total最后就忽略了原来内容中的fire engines字符串,最后45加10等于55,$total最后的值就等于55了。(忽略了次要,最后收获了重要。)
<?php
$total=”1.0”;
If($total) echo “We’re in positive territory!”;
?>
在这个例子中,$total中的内容自动转换为布尔类型。
<?php
$val1=”1.2e3”; //1.2e3其实就是1200
$val2=2;
echo $val1*$val2; //输出2400
?>
avatar
langlangname
7楼
gettype()函数返回var所指定变量的类型。共有八个可能的返回值:array(数组型),boolean(布尔型),double(双精度型),integer(整型),object(对象型),resource(资源型),string(字符串型)和unknow type(未知类型)。函数的形式为:
string gettype(mixed var) gettype函数的返回值是字符串型,参数mixed var表示var变量可以是各种类型。
settype()函数将var指定的变量转换为type指定的类型。Type有7个可取值:array(数组型),boolean(布尔型),float(浮点型),integer(整型),null(空类型),object(对象型)和string(字符串型)。如果转换成功,则返回TRUE,如果失败,则返回FALSE。函数的形式为:
boolean settype(mixed var, string type) settype函数的返回值是boolean布尔型, 参数mixed var表示var变量可以是各种类型,string type是字符串型。
当然,也可以用很多函数来确定变量的类型,包括is_array()是否是数组,is_bool()是否是布尔型,is_float()是否是浮点型,is_integer()是否是整型,is_null()是否是空类型,is_numeric()是否是数字或数字字符串,is_object()是否是对象型,is_resource()是否是资源类型,is_scalar()是否是标量类型和is_string()是否是字符串类型。以上函数判断正确返回TRUE,判断错误返回FALSE。然后将它们合并为一个一般形式。
boolean is_name(mixed var)
举一个例子:
<?php
$item=43;
printf(“The variable \$item is of type array: %d <br/>”, is_array($item));//判断$item是否是数组型。其中的\是转义字符,\$item最后显示的时候是$item。
printf(“The variable \$item is of type integer:%d <br/>”, is_integer($item));
//判断$item是否是整型。
printf(“The variable \$item is numeric:%d <br/>”, is_numeric($item));
//判断$item是否是数值型。
?>
以上三行代码返回如下内容,其中0代表错误,1代表正确:
The variable $item is of type array:0
The variable $item is of type integer:1
The variable $item is numeric:1
avatar
langlangname
8楼
PHP中的标识符,可以由一个或多个字符组成,必须以字母或下划线开头。此外,标识符只能由字母,数字,下划线字符和从127到255的其他ASCII字符组成。标识符区分大小写,因此,变量$langlang不同于变量$Langlang。标识符可以是任意长度。同时,标识符不能与任何PHP预定义关键字(PHP中已经定义好的关键字,就比如const)相同。
比如This&that就是非法的标识符,因为this和that都是PHP中的预定义关键字。
变量是可以在不同时刻存储不同值的符号。变量总是以美元符$开头,然后是变量名。(我是不是可以理解为PHP其实很受那些财迷欢迎,都是美元嘛,这么多钱,哈哈。)变量名可以以字母或下划线开头,要由字母,下划线,数字或从127到255的其他ASCII字符组成。当然,变量也是区分大小写的。当然,所有的变量都应该在使用前进行声明,最好带有注释。(写代码的时候注释其实非常重要,方便以后的阅读和修改。)变量赋值有两种方法,值赋值和引用赋值。
值赋值
按值赋值就是将赋值表达式的值复制到变量。比如,
$color=”red”;
$number=12;
$age=12;
$sum=12+”15”; //$sum等于27
对于引用赋值而言,如果多个变量引用了同一个内容,修改其中任意一个变量,在其余的变量上都将有所反映。(你只要改变了我,你其实就已经相当于改变了跟我有关的很多人。)在等于号后面加一个&符号就可以完成引用赋值。
<?php
$value1=”Hello”;
$value2=& $value1; //$value1和$value2都等于”Hello”
$value2=”Goodbye”; //$value1和$value2都等于”Goodbye”
?>
PHP还支持另一种引用赋值语法,就是将&符号放在所引用变量的前面。
<?php
$value1=”Hello”;
$value2= &value1; //$value1和$value2都等于”Hello”
$value2=”Goodbye”; //$value1和$value2都等于”Goodbye”
?>其中注意了,$value2=& $value1;跟$value2= &value1;是不一样的。一个是等于号后面加上&,一个是变量前面加上了&。
avatar
langlangname
9楼
在PHP脚本的任何位置都可以声明变量。(你想什么时候使用我这个变量朋友都可以的哦。因为我的性格很好。)变量可以访问的范围称为作用域scope。
PHP变量有4种作用域:
局部变量
函数参数
全局变量
静态变量
在函数中声明的变量称为是局部变量。其实也就是它只能够在函数中引用。(离开了函数,它就活不下去了。就像鱼脱离了水就会死是一样的道理。)
$x=4; //这里的$x其实就是一个全局变量
function assignx(){ //声明了一个assignx函数
$x=0; //这里的$x就是一个局部变量了,离开了这个函数,它其实就活不下去了。
printf(“\$x inside function is %d <br/>”,$x);
}
assignx(); 使用这个函数assignx()。
printf(“\$x outside of function is %d <br/>”,$x);
代码的执行结果为:
$x在函数内部为0
$x在函数外部为4,其实这个例子中外面的那个$x其实就等同于是全局变量了。
function x10($value){
$value=$value*10;
return $value;
}
在声明参数的函数内部可以访问和处理这些函数参数,但当函数执行结束时,参数就会撤销。
与局部变量相反,全局变量可以在程序的任何地方访问。只要在变量前面加上关键字GLOBAL,这样就可以将其识别为全局变量。(你在哪里都可以召唤我这个全部变量朋友哦。)
$somevar=15; 这里$somevar是局部变量
function addit(){
GLOBAL $somevar; 将$somevar重新声明为全局变量
$somevar++; $somevar自己增加1
echo “Somevar is $somevar”; 然后打印出来
}
addit(); 调用addit这个函数
$somevar最后显示的值是16.但是如果省略下面这行代码:
GLOBAL $somevar; 变量$somevar将赋值为1.因为$somevar在addit()函数中被认为是一个局部变量。
当然,也可以使用$GLOBALS数组将变量$somevar声明为全局变量。
$somevar=15;
function addit(){
$GLOBALS[“somevar”]++; 将somevar通过$GLOBALS数组声明为是全局变量。
}
addit();
echo “Somevar is “.$GLOBALS[“somevar”];
somevar的返回值就是16了。
静态变量在函数退出时不会丢失值,并且再次调用此函数时还能够保留这个值。(只要你对我这个静态变量朋友好,我就会一直记得你的好。而且会一直保留下去。)在变量名前面加上关键字STATIC就可以声明一个静态变量。
function keep_track(){
STATIC $count=0;
$count++;
echo $count;
echo “<br/>”;
}
keep_track();
keep_track();
keep_track();
因为$count是静态的,它会在每次执行函数时都会保留前面的值。所以输出如下:
1
2
3
avatar
langlangname
10楼
foreach($_SERVER as $var=> $value){ //foreach是一个循环语句,foreach将$_SERVER PHP预定义变量中的所有值都遍历出来。(遍历,其实跟认真读书是一样的道理,要认真地每一页都阅读一遍。在这里是将$_SERVER中的每一个变量都访问一遍。)出来。$_SERVER超级全局变量包含由Web服务器创建的信息,它提供了服务器和客户配置及当前请求环境的有关信息。
echo “$var=> $value <br/>”;
}
显示用户的IP地址:
printf(“Your IP address:%s”,$_SERVER[‘REMOTE_ADDR’]);
这会返回一个数字型的IP地址,如192.0.34.166。
获得关于用户浏览器和操作系统的信息。
printf(“Your browser is:%s”,$_SERVER[‘HTTP_USER_AGENT’]);
要使用预定义变量数组,必须在php.int文件中启用配置参数track_vars。
$_SERVER[‘HTTP_REFERER’]。引导用户到达当前位置的页面的URL。
$_SERVER[‘REMOTE_ADDR’]。客户IP地址。
$_SERVER[‘REQUEST_URI’]。URL的路径部分。也就是如果URL是http://www.example.com/langlang/lang/index.html,那么URI就是langlang/lang/index.html。
$_SERVER[‘HTTP_USER_AGENT’],客户的用户代理,一般会提供操作系统和浏览器的有关信息。
avatar
langlangname
11楼
$_GET超级全局变量包含使用GET方法传递的参数的有关信息。如果请求URL http://www.example.com/index.html?cat=langlang&id=188,就可以使用$_GET超级全局变量访问如下变量:
$_GET[‘cat’]=”langlang”
$_GET[‘id’]=”188” 其实就是对应了URL地址中的cat=langlang和id=188。
$_POST超级全局变量包含用POST方法传递的参数的有关信息。
<form action=”subscribe.php” method=”post”> 将表单提交到subscribe.php页面,提交服务器的http方法是通过post表单的提交方式。post适用于大量数据的提交。

是HTML中的段落标签。
Email address:<br/> <br/>换行。
<input type=”text” name=”email” size=”20” maxlength=”50” value=””/>
text会产生一个文本框,文本框名称name是email,大小size为20,最大长度maxlength为50,value初始化值为空。



Password:<br/>
<input type=”password” name=”pswd” size=”20” maxlength=”15” value=””/>
password会产生一个密码文本框。密码文本框名称name为pswd,大小size为20,最大长度maxlength为15,初始化值value为空。



<input type=”submit” name=”subscribe” value=”subscribe!”/>
产生一个submit提交按钮,提交按钮名称为subscribe,提交按钮的显示值为subscribe!。


</form>
通过目标脚本subscribe.php,就可以使用下面的POST变量:
$_POST[‘email’]=”[email protected]”;
$_POST[‘pswd’]=”rainyday”;
$_POST[‘subscribe’]=”subscribe!”; 其中email,pswd,subscribe就是刚才那个脚本中name所指向的值。(你最开始在PHP脚本中给定了我最开始的name名称,所以,我很感谢你,你能够在$_POST中用到我。)
avatar
langlangname
12楼
刚才新更新的教程里其实有p这个段落标签,在天涯论坛里直接就显示出来了,大家所以感觉看上去非常奇怪吧。
avatar
langlangname
13楼
$COOKIE(COOKIE就是为了让网站辨别出你的身份,以加密的方式,暂时或永久地存储在你本地电脑上的那些文件。通过这些文本文件中的文件名,就可以看到哪个Web站点喜欢上了你,然后在你的电脑上放置了COOKIE这种小甜饼供你这位超级大用户来享用。)超级全局变量存储了通过HTTP cookie传递到脚本的信息。当使用setcookie()存储了一个名为langlang.com,值为langlang的cookie。以后可以通过调用$_COOKIE[“langlang.com”]来获得这个值。
$FILES超级全局变量包含通过POST方法向服务器上传的数据的有关信息。
$FILES[‘upload-name’][‘name’]。从客户端向服务器上传文件的文件名。
$FILES[‘upload-name’][‘type’]。上传文件的MIME类型(MIME多用途互联网邮件扩展类型,也就是设定电脑里的某一个扩展名的文件,当访问的时候,浏览器会自动使用指定的应用程序来打开。指定的MIME类型,可以是applilcation应用,audio声音,image图片,text文本,video视频等等。总之MIME类型就像一个多面手一样,在默默地帮助你通过浏览器打开你电脑中的每一个文件。)。这个变量是否赋值取决于浏览器的功能。
$FILES[‘upload-name’][‘size’]。上传文件的大小(以字节为单位)。
$FILES[‘upload-name’][‘tmp_name’],上传之后,将此文件移到最终位置之前赋予的临时名。
$FILES[‘upload-name’][‘error’]。上传状态码,尽管这个变量名为error,但实际上在成功的情况下也会填写这个变量。它有5个可能的值。
UPLOAD_ERR_OK。文件成功上传。
UPLOAD_ERR_INI_SIZE. 文件大小超出了upload_max_filesize指令所指定的最大值。
UPLOAD_ERR_FORM_SIZE.文件大小超出了MAX_FILE_SIZE隐藏表单域参数(可选)指定的最大值。
UPLOAD_ERR_PARTIAL.文件只上传了一部分。
UPLOAD_ERR_NO_FILE.上传表单中没有指定文件。
$ENV超级全局变量提供PHP解析器所在服务器环境的有关信息。
$_ENV[‘HOSTNAME’]。服务器主机名。
$_ENV[‘SHELL’]。系统shell。
$_SESSION超级全局变量包含与所有会话变量有关的信息。
avatar
langlangname
14楼
大家其实应该知道,PHP声明变量时,前面都加上$符号,其实,可以在例如$langlang前面再加一个$符号,这样就成为了PHP中变量的变量。
$langlang=”abc”;
$$langlang=”&langlang”;
其作用是把&langlang赋值给名为abc的变量。
因此,下面两行代码将得到相同的结果:
echo $langlang $abc;
echo $langlang ${$langlang};
两个结果都是输出字符串abc &langlang。
avatar
langlangname
15楼
PHP中的常量是指在程序执行中无法修改的值。(你完全无法改变我,就是因为我足够坚定。因为,我就是你并不真正熟悉的那个常量。)常量使用define()函数定义。
boolean define(string name,mixed value[,bool case_insensitive]) 参数name常量名的返回值是字符串类型,常量值或者表达式value的返回值是混合类型(常量只能够包含标量数据,也就是boolean,integer,float和string),case_insensitive这个可选参数值如果为TRUE,那么后面对此常量的引用将不区分大小写。
define(“PI”, 3.141592);
下面的代码使用了这个常量:
printf(“The value of pi is %f”,PI); 这里的%f表示浮点数。
$pi2=2*PI;
printf(“Pi doubled equals %f”,$pi2);
此代码生成如下结果:
The value of pi is 3.141592.
Pi doubled equals 6.283184.
常量是全局的,可以在脚本的任何位置引用。(你在任何位置都可以召唤我这个常量朋友。)
表达式是一个短语,它表示程序中的某个特定动作。所有表达式至少由一个操作数和一个或多个操作符组成。
$a=5; //将整型值5赋值给变量$a
$a=”5” //将字符串5赋值给变量$a
$sum=50+$some_int; //将50和$some_int的和赋值给$som
$wine=”langlang”; //将“langlang”赋值给变量$wine
$inventory++; //将变量$inventory自增1
操作数是表达式的输入。
$a++;// $a就是操作数。
$sum=$val1+$val2;//$sum,$val1和$val2都是操作数。
avatar
langlangname
16楼
操作符是表达式中指定某个动作的符号。(在运动中的某一个瞬间,这个瞬间可以用操作符来记录下来。)
操作符优先级是操作符的一个特性。
$total_cost=$cost+$cost*0.06;这里先计算$cost*0.06,再加上$cost.
可以等价地写为:
$total_cost=$cost+($cost*0.06);
$value=3*4*5*7*2;
这个例子与下例相同:
$value=((((3*4)*5)*7)*2);
乘法(*)操作符的结合性是从左至右的。
$c=5;
print $value=$a=$b=$c;
上面的示例与下例相同:
$c=5;
$value=($a=($b=$c));
计算这个表达式时,变量$value,$a,$b,$c都将包含值5,因为赋值操作符(=)的结合性是从右至左的。
算数操作符中的$a%$b就是$a除以$b的余数。
$a=”abc”.”def”; $a通过拼接赋值为”abcdef”。
$a.=”ghijkl”; $a等于它的当前值与”ghijkl”的拼接结果。
//$a包含字符串值“Spaghetti &Meatballs”;
$a=”Spaghetti” . ”&Meatballs”;
$a.=”are delicious.”;
//这个时候的变量a通过拼接赋值操作符.=的拼接之后,值变为”Spaghtti &Meatballs
are delicious.”(什么时候都可以使用拼接操作符,拼接可以创造出很多不一样,有个性的东西。)
avatar
langlangname
17楼

自增(++)和自减操作符(--)可以将当前变量的值增1或者减1。(你可以减去我一个朋友,你也可以帮助我增加一个朋友哦。因为,我看似朋友很少,但其实,还可以。)
$inv=15; //将整型值15赋值给$inv
$oldInv=$inv--; //先将$oldInv中的值赋值给$inv,然后将$inv自减。
$origInv=++$inv; //先将$inv自增,然后将$inv中的新值赋值给$origInv.
将操作数放在操作符前面称为前自增和前自减运算。而放在后面称为后自增和后自减运算。(自增和自减操作符使用的顺序对变量的值有重大影响。操作符放的顺序不同,就像排在队伍的不同位置是一样的道理,对于数值的改变有重大影响。)
逻辑操作符常用于控制结构中,如if条件和while及for循环。
$a&&$b 与 如果$a,$b都为true,则输出true
$a AND $b 与 如果$a,$b都为true,则输出true
$a || $b 或 如果$a或$b为true,则输出true
$a OR $b 或 如果$a或$b为true,则输出true
!$a 非 如果$a不为true,则输出true
NOT $a 非 如果$a不为true,则输出true
$a XOR $b 异或 如果只有$a或$b为true,则输出true
file_exist(“filename.txt”) OR echo “File does not exist!”;
会有两种输出:
通过file_exist函数判断文件filename.txt是否存在。
如果判断出文件不存在,则输出句子”File does not exist!”;
相等操作符,用来比较两个值。测试其相等性。
$a==$b 是否相等 如果$a和$b相等,则输出true
$a != $b 是否不相等 如果$a和$b不相等,则输出true
$a ===$b 是否相同(恒等符号,判断变量内容和类型是否相等。) 如果$a和$b相等,并且类型也相同,则输出true
比较操作符与逻辑操作符相似,通过比较两个或多个变量值的结果,提供了一种控制程序流程的方法。
$a<$b 小于 如果$a小于$b,则输出true
$a>$b 大于 如果$a大于$b,则输出true
$a<=$b 小于或等于 如果$a小于或等于$b,则输出true
$a>=$b 大于或等于 如果$a大于或等于$b,则输出true
($a==12)?5:-1 三元运算 如果$a等于12,返回值为5,否则返回值为-1
当前,比较操作符只能够用来比较数值。(通过以上的这些操作符,再结合之前的代码和教程,其实就已经能够写出还算是可以的小程序了。PHP好像看似很难,但,其实PHP跟写作好像有着非常大的关联或者是联系,如果感兴趣的话,一直坚持下去,也一直跟我共同学习下去吧。)
avatar
langlangname
18楼
不知不觉《郎朗的计算机文学》前言加正文一万突破了,其实对于我,对于阅读的大家而言都会有所收获,其实,编程语言并不难,难就难在是否能够继续坚持学习下去。看似枯燥,其实,很有意义。大家说是吧。
avatar
langlangname
19楼
以下是一些PHP中位操作符的例子。
$a & $b 与 $a和$b包含的每一位相与
$a | $b 或 $a和$b包含的每一位相或
$a ^$b 异或 $a或$b包含的每一位相异或
~$b 非 $a中的每一位取反
$a<<$b 左移 $a将接收到$b左移两位的值
$a>>$b 右移 $a将接收到$b右移两位的值
用双引号括起的字符串在PHP脚本中最为常见,因为它们提供了最大的灵活性,其原因是变量和转义序列都会得到相应的解析。(你用双引号强调了我,我就成为了你最为亲睐的字符串挚友。)
<?php
$sport=”boxing”; 变量$sport定义为boxing字符串。
echo “Jason’s favorite sport is $sport.”; 然后通过echo语句输出这一段话。变量$sport中的内容也在获得了之后输出。
?>
这个例子会返回:
Jason’s favorite sport is boxing.
<?php
$output=”This is one line.\n And this is another line.”;变量$output中的字符串内容会输出,换行符\n都会解析为换行符号。
echo output;
?>
它将在浏览器源代码中返回如下内容:
This is one line.
And this is another line.
PHP中可识别的转义序列
\n 换行符
\r 回车
\t 水平制表符
\\ 反斜杠
\$ 美元符
\” 双引号
\[0-7][1,3] 八进制记法
\x[0-9A-Fa-f][1,2] 十六进制记法
用单引号的时候,字符串就按照声明的形式原样解释。这表示,解析字符串时,变量和转义序列都不会进行解析。(你用单引号来定义我这个朋友的时候,我就变成了一个非常直接的朋友,不需要拐弯抹角。)
例如
print ‘This string will $print exactly as it \’s \n declared.’;
这会生成
This string will $print exactly as it’s \n declared.(你会很惊喜地发现print语句中单引号中的内容除了\’转义为了’,其他都没有进行解析,而是原样显示。)
print ‘This is another string.\\’;
这会生成:
This is another string.\ print语句中的\\被解析成了\
avatar
langlangname
20楼
heredoc语法为输出大量文本提供了一种便利的方式。
<?php
$website=”http://www.romatermini.it”;
echo <<<EXCERPT

Langlang is a very good and old boy.


EXCERPT;
?>
这个语句中,开始和结束标识符必须相同。这个例子中的开始和结束标识符为EXCERPT。
当然你也可以用LANGLANG作为你喜欢的开始和结束操作符也可以。当然,限制也是有的,该标识符必须完全由字母数字字符和下划线组成,而且不能以数字或者下划线开头。就比如1ABC和_ABC不能够作为开始和结束标识符。
开始标识符前面必须有三个左尖括号:<<<
结束标识符必须在一行开始处,而且前面不能有空格或任何其他多余的字符。
avatar
langlangname
21楼
条件语句使程序可以根据各种输入做出响应,基于输入值使用逻辑来辨别各种不同的条件。
If条件是所有主流编程语言中最常见的结构。(if如果你想改变我,那请通过if语句来改变我身边最熟悉也最陌生的你自己。)
if(expression){
statement
}
<?php
$secretNumber=453; 定义变量$secretNumber为整型453;
If($_POST[‘guess’])==$secretNumber){ 通过$_POST中传过来的guess判断是否与$secretNumber相等
echo “

Congratulations!

”; 然后通过echo语句打印输出Congratulations!
}
?>
条件体只包含一条语句时,如果你很懒,可以不使用大括号。
<?php
$secretNumber=453;
If($_POST[‘guest’]==$secretNumber) echo”

Congratulations!

”; 这里就直接使用echo语句了,echo之前也就没有使用大括号,在同一行写入代码了。是可以的。
?>
<?php
$secretNumber=453;
If($_POST[‘guess’]==$secretNumber){
echo “

Congratulations!!

”;
} else{
echo “

Sorry!

”; if以上判断中的语句如果为假,则执行else语句后面的echo打印。
if你不认同我,else我或许也不会认同你。其实if跟else是相互衔接的,互有关联的。
}
?>
<?php
$secretNumber=453;
$_POST[‘guess’]=442;
if($_POST[‘guess’]==$secretNumber){
echo ‘

Congratulations!

”;
}elseif(abs($_POST[‘guest’])-$secretNumber)<10){ abs函数返回一个数的绝对值。判断$_POST[‘guest’]减去变量$secretNumber的数值的绝对值是否小于10。如果小于10,则执行echo语句,否则执行随后的else语句。
echo “

You’re getting close!

”;
}else{
echo “

Sorry!

”;
}
?>
<?php
switch($category){
case “news”: case”news”就是switch语句中的一条分支。
echo “

What’s happening around the world

”;
break;
case “weather”: case”weather”也是switch语句中的一条分支。如果switch中的变量$category的内容为weather的时候,就执行case”weather”中的语句。
echo “

Your weekly forecast

”;
break;
case “sports”:
echo “

Latest sports highlights

”;
break;
default:如果switch中的$category跟case中的内容都不一样的时候,则执行default中的语句。
echo “

Welcome to my Website

”;
}
?>
注意,以上每个case块的末尾处的break语句就意味着这个case块已经执行结束了。
avatar
langlangname
22楼
今天更新的教程代码中有很多

,所以显示有点异常,大家注意一下。但是应该不影响阅读。
avatar
langlangname
23楼
有很多p段落标签。
avatar
langlangname
24楼
while语句指定了一个条件,在其嵌入代码结束执行前,必须满足这个条件。其语法是:
while(expression){
statements
}
<?php
$count=1;
while($count<5){ 判断当$count的数值等于5时,while循环的判断就结束了。
printf(“%d square=%d <br/>”,$count,pow($count,2)); pow($count,2)是求$count的平方。
$count++;
}
?>
<?php
$linecount=1; 定义变量$linecount为1
$fh=fopen(“sports.txt”,”r”); 以只读方式打开sports.txt
while(!feof($fh) &&$linecount<=5){ 通过while判断$fh还没有到达文件末尾feof或者变量$linecount小于等于5
$line=fgets($fh,4096); fgets()函数会在到达指定长度,这里为4096-1字节,碰到换行符,
读到文件末尾(eof)时,停止并返回一个新行,这里是最后赋值给$line。
echo $line.”<br/>”;
$linecount++;
}
?>
do...while循环条件是while的一种变体,它在代码块的结束处验证循环条件,而不是在开始处。其语法为:
do{
statements
}while(expression);
do...while语句中的代码块总是至少会执行一次。(你在你的人生中总是必然会经历一次以上的背叛。如果你愿意经历do,你也愿意承担之后的while风险的话。)
<?php
$count=11;
do{
printf(“%d squared=%d <br/>”, $count, pow($count,2));
}while($count<10);
?>
输出为11 squared=121
for语句提供了比while更复杂的循环机制。其语法为:
for(expression1;expression2;expression3){
statements
}
//例子1
for($kilometers=1;$kilometers<=5;$kilometers++){ for循环里设定变量$kilometers为1,变量$kilometers设定的时候小于等于5,变量$kilometers后自增
printf(“%d kilometers=%f miles <br/>”,$kilometers,$kilometers*0.62140);
将$kilometers乘以0.62140并通过printf函数打印出来
}
//例子2
$kilometers=1;
for($kilometers=1; $kilometers++){
if($kilometers>5) break; 判断如果变量$kilometers大于5,break语句随即退出循环。
printf(“%d kilometers=%f miles <br/>”,$kilometers,$kilometers*0.62140);
}
//例子3
$kilometers=1;
for(;;){ 这里for(;;)跟while(true)的意思是一样的。如果为真则执行之后的代码段。
if($kilometers>5) break;
printf(“%d kilometers=%f miles <br/>”, $kilometers,$kilometers*0.62140);
$kilometers++;
}
foreach循环结构语法最擅长循环处理数组,从数组中提取每个”键/值”对,直到获得所有项,或满足某些内部条件为止。
foreach(array_expr as $value){ 从数组中获取每个值,每次迭代都将指针后移一位,这样就能够更加接近数组的末尾,这里也就是数组array_expr的末尾。
statement
}
<?php
$links=array(“www.apress.com”,www.php.net”,”www.apache.org”); 定义了一个存放三个网站url地址的$links数组。
echo “Online Resources:<br/>”;
foreach($links as $link){ 通过foreach函数获得每个网站url地址。
echo “<a href=\”http://$link\”>$link</a><br/>”;
}
?>
第二种形式适合处理包含键和值的数组。语法如下:
foreach(array_expr as $key=>$value){
statement
}
$links=array(“The Apache Web Server”=>”www.apache.org”,
“Apress”=>”www.apress.com”,
“The PHP Scripting Language”=>”www.php.net”);
数组$links里存储了相应的key和value值。
echo “Online Resource:<br/>”;
foreach($links as $title=>$link){ 通过foreach语句取出数组$links中的相应的键/值对。
echo “<a href=\”http://$link\”>$title</a><br/>”;
}
avatar
langlangname
25楼
刚才最新更新的内容中其实有b这个加粗的标签在,跟p段落标签是一样的。所以b会显示为粗体,p会显示为换行。
avatar
langlangname
26楼
PHP读书笔记写到现在正文一万字以上了。其实PHP挺有意思的。
avatar
langlangname
27楼
如果包含一个break语句,将立即结束do...while,for,foreach,switch或while循环的执行。(如果你想结束我们的友情的话,那请使用break来强制终止吧。)
<?php
$primes=array(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47);声明一个都是素数的数组。
for($count=1;$count++;$count<1000){ 通过for循环从第1次到第999次执行999次
$randomNumber=rand(1,50); rand函数是返回随机整数,rand(1,50)是在1到50之内生成随机整数。
if(in_array($randomNumber,$primes)){ 通过in_array函数判断如果$randomNumber在$primes数组内
break; 语句强制结束
}else{
printf(“Non-prime number found: %d <br/>”,$randomNumber); 通过printf函数打印$randomNumber中生成的随机整数。
}
}
?>
下面是上例的输出:
Non-prime number found:48
Non-prime number found:42
Prime number found:17
通过添加goto语句,你可以直接跳到一个循环或条件构造之外的某个特定位置。(你想在你任何一个方面尝试改变的时候,可以通过goto语句来实现你所认为的蜕变,到你最想达到的位置。)
<?php
for($count=0;$count<10;$count++) 循环从0到9执行了10次
{
$randomNumber=rand(1,50);
if($randomNumber<10)
goto less; //通过goto语句跳转到后面的less分支语句。
else
echo “Number greater than 10:$randomNumber<br/>”;
}
less:
echo “Number less than 10:$randomNumber<br/>”; 这里就是之前的goto语句跳转到的less程序段,实现了打印输出的功能。
?>
这会生成以下结果:
Number greater than 10:22
Number greater than 10:21
Number greater than 10:35
Number less than 10:8
continue语句使当前循环迭代执行结束,并从下一次循环迭代开始执行。(如果你想继续友情,继续坚持PHP开发的话,那请使用continue语句来继续你对于现实的热情。)
<?php
$usernames=array(“grace”,”doris”,gary”,”nate”,”missing”,”tom”); 声明一个$usernames数组,里面有6个元素。
for($x=0;$x<count($usernames);$x++){ 定义一个for循环,通过count函数计算$usernames数组中的元素数量,并作为接下去循环的次数。
if($usernames[$x]==”missing”) continue; 如果$usernames数组中发现missing的时候,使用continue重新开始重复执行。
printf(“Staff member:%s <br/>”,$usernames[$x]); 最后用printf函数输出$usernames数组。
}
?>
结果输出如下:
Staff member:grace
Staff member:doris
Staff member:gary
Staff member:nate
Staff member:tom
avatar
langlangname
28楼
为了追求效率,程序员开始引入了文件包含语句,这样就能够把功能组件隔离为单独的文件。然后在需要时重新组装。PHP提供了四种在应用程序中包含文件的语句。(我想让你随时都陪在我身边,所以,我开始使用包含语句让我随时随地都能够关联得到你。)
include()语句将在其被调用的位置处判断并包含一个文件。
include(/path/to/filename)
与print和echo一样,使用include()时可以忽略括号。
<?php
include “/usr/local/lib/php/wjgilmore/init.inc.php”; 包含一个外部的php文件。
?>
if(expression){
include(‘filename’); 通过if和else语句来调用相应的include文件。
else{
include(‘another_filename’);
}
?>
当然include()语句也可以包含合法的URL地址。
include “http://www.langlang.com/index.html?background=blue”;
include_once()函数的作用跟include()相同,不过它会首先验证是否已经包含了该文件。它其实只会包含文件一次。(我只想通过include_once()包容你一次,你能够接受么?)
include_once(filename)
require(filename)
require()出错时,脚本将停止执行,而在使用include()的情况下,脚本将继续执行。同时也无论require的位置如何,指定文件都将包含到出现require()的脚本中。无论如何require()都必须要包含到指定的文件。
require_once(filename)
require_once()函数确保文件只包含一次,在遇到require_once()后,后面再试图包含相同的文件时都将被忽略。
avatar
langlangname
29楼
标准的PHP发行包中有1000多个标准函数。
<?php
$value=pow(5,3) //返回5的3次方,125。
echo $value;
?>
如果只是希望输出函数的结果,可以不把这个值赋给变量,而是直接输出(我其实挺喜欢直来直去的人,因为,这样的人,通常都比较真诚。这种方式在直接输出里也是这样来理解的。)
<?php
echo pow(5,3);
?>
echo “Five raised to the third power equals”.pow(5,3).”.”; 通过.操作符将pow(5,3)拼接起来。
当前也可以使用printf(),更有说服力:
printf(“Five raised to the third power equals %d.”,power(5,3)); 这里的%d是带符号十进制数。后面的power(5,3)就是显示在%d这个位置的。
以上两种情况都将返回以下结果:
Five raised to the third power equals 125.
当然,最开始的时候就可以使用预定义模板来定义一个函数,如下:
function functionName(parameters) 定义了一个自定义函数,函数名叫做functionName,parameters就是传入的参数。
{
function-body 函数体
}
考虑下面的函数generate_footer(),它将输出一个页脚:
function generateFooter()
{
echo “Copyright 2007 W.Jason Gilmore”;
}
之前定义了之后,就可以像下面这样调用这个函数(函数一旦定义好了,就能够在任何位置通过声明这个函数的名字来进行调用。定义好了曹操,然后写曹操的时候曹操就自动来了。都是一样的道理。)
<?php
generateFooter();
?>
function calcSalesTax($price,$tax) 这个函数接受两个参数,名为$price和$tax。它们将在计算中使用。
{
$total=$price+($price*$tax);
echo “Total cost:$total”;
}
以上的这个calcSalesTax函数,可以有如下的调用:
calcSalesTax(15.00,0.0);
当然,也可以这样
<?php
$pricetag=15.00;
$salestax=0.075;
calcSalesTax($pricetag,$salestax); 以这种方式传递参数时,称为按值传递。
?>
在有些情况下,可能希望在函数内对参数的修改在函数范围外也能反映,按引用传递参数就可以满足这种需要。按引用传递参数(也称传引用)要在参数前加上&符号。
<?php
$cost=20.99;
$tax=0.0575;
function calculateCost(&$cost,$tax) 传入的参数&$cost是对变量$cost的引用。
$cost=$cost+($cost*$tax); 修改变量$cost中的值
$tax+=4; 变量$tax增加4
}
calculateCost($cost,$tax);
printf(“Tax is %01.2f%% <br/>”,$tax*100); %01.2f%%,01中的0是填空字元,如果位置空着,就用0来填满,1规定小数点前面的数字占位要有1位以上,.2f代表小数点后有两位,%%就代表百分号%。这句printf最后打印输出的就是Tax is 5.75%
printf(“Cost is: $%01.2f”,$cost); 这句话最后打印输出的事Cost is $22.20 在这个函数中,$tax因为是按值传递,所以数值依然相同,而$cost因为是按引用传递,所以数值已经改变。
?>
avatar
langlangname
30楼
可以为输入参数指定默认值。(你想不想成为我默认的朋友,如果可以的话,那就请尽情使用你所认为的默认参数值。)
function calcSalesTax($price,$tax=0.0675) 这里变量$tax就指定为了一个默认的参数值
{ $total=$price+($price*$tax);
echo “Total cost:$total”;
}
仍可以为$tax传递其他的税率,通过调用calcSalesTax()函数才会使用默认值0.0675:
$price=15.47;
calcSalesTax($price);
可以指定某个参数为可选参数,当然,这些参数要放在参数列表的末尾,而且要指定其默认值为空。(默认的朋友其实一直都在你面前,关键是看你怎么看待这个对于你而言一片空白的朋友。我其实是无所谓的。)
function calcSalesTax($price,$tax=””) 这里变量$tax就被指定为一个可选的参数,而且默认值等于””,也就是空白。
{
$total=$price+($price*$tax);
echo “Total cost:$total”;
}
以上这个函数,如果没有销售税,可以如下调用calcSalesTax()函数,而不指定第二个参数:
calcSalesTax(42.00);
这个调用会返回如下结果:
Total cost:$42.00
如果指定了多个可选参数,可以选择性地传递某些参数。(多个可选的朋友,看似好像有点没有多大重要性,但是,关键看你怎么去看待它们。它们其实一直静悄悄地守候在你的身边凝视着你。)
function calculate($price,$price2=””,$price3=””) 这里变量$price2和$price3就指定为了多个可选参数了。
{
echo $price+$price2+$price3;
}
调用calculate()函数时,可以只传递$price和$price3,如下:
calculate(10,””,3); 变量$price3本来在参数列表里为空,这里被传入参数,赋值为3。
它返回如下值:
13
return()语句可以向函数调用者返回任意确定的值。
function calcSalesTax($price,$tax=0.0675)
{
$total=$price+($price*$tax);
return $total; 这里不输出变量$total而是选择通过return语句返回变量$total
}
还有一种方式,可以直接返回计算结果,而不要赋给变量$total,如下:
function calcSalesTax($price,$tax=0.0675)
{
return $price+($price*$tax); 这里就直接通过return语句返回这几个变量的计算结果。
}
下面是调用这个函数的例子:
<?php
$price=6.99;
$total=calcSalesTax($price); 这里calcSalesTax函数就传入一个变量$price参数,$tax有默认值,然后通过return返回了计算结果之后,最后赋值给变量$total。(走遍千山万水,最后发现自己最中意的某个朋友其实只是通过自己的努力一直在经营着,在传递着而已。)
?>
利用list()构造可以很方便地从数组中获取值。如下:
$colors=array(“red”,”blue”,”green”);
list($red,$blue,$green)=$colors; 通过list()构造获取$colors数组中的相应值,并赋值给$red,$blue,$green。
?>
<?php
function retrieveUserProfile()
{
$user[]=”Jason”;
$user[]=”[email protected]”;
$user[]=”English”;
return $user;
}
list($name,$email,$language)=retrieveUserProfile(); 通过list构造获取函数retrieveUserProfile中的数组$user的相应的三个值,并赋值给$name,$email,$language。
echo “Name:$name,email:$email,language:$language”; 然后在这里打印输出
?>
执行此脚本将返回:
Name:Jason,email:[email protected],language:English
avatar
langlangname
31楼
递归函数,即调用自身的函数。(在到达成功彼岸的时候,通常需要反复努力,反复尝试,但是,这个过程只要记录下来过,其实就已经是一种非常不错的递归经历了。)
function amortizationTable($pNum,$periodicPayment,$balance,$monthlyInterest)
$pNum标识为还款编号,$periodicPayment表示每月总的还款额,$balance表示剩余贷款额,
$monthlyInterest指定了每月的利率。
{
$paymentInterest=round($balance*$monthlyInterest,2); 通过round函数对每月贷款利息保留两位小数进行获得。并赋值给每月贷款利息$paymentInterest
$paymentPrincipal=round($periodicPayment-$paymentInterest,2); 通过每月总的还款额$periodicPayment减去每月贷款利息$paymentInterest,用round函数保留两位小数,并赋值给每月还款本金$paymentPrincipal。
$newBalance=round($balance-$paymentPrincipal,2); 通过剩余贷款额$balance减去每月还款本金$paymentPrincipal,用round函数保留两位之后赋值给新的剩余贷款额$newBalance。
if($newBalance<$paymentPrincipal){
如果新的剩余贷款额$newBalance小于每月还款本金$paymentPrincipal,新的剩余贷款额设定为0,避免它为负数。
$newBalance=0;
}
printf(“<tr><td>%d</td>”,$pNum); 以带符号十进制数%d的格式打印还款编号$pNum。
printf(“<td>$%s</td>”,number_format($newBalance,2)); 以字符串格式%s显示变量$%s.
printf(“<td>$%s</td>”,number_format($periodicPayment,2)); 通过格式化数字函数number_format将得到的新的剩余贷款额$newBalance和每月总的还款额$periodicPayment进行数字的格式化。并打印出来。
printf(“<td>$%s</td>”,numberformat($paymentPrincipal,2));
printf(“<td>$%s</td></tr>”,numberformat($paymentInterest,2));
如果新的剩余贷款额$newBalance还没有为0,递归调用amorizationTable函数
if($newBalance>0){
$pNum++;
amortizationTable($pNum,$periodicPayment,$newBalance,$monthlyInterest);
}else{
return 0;
}
}
avatar
langlangname
32楼
这里我非常欣喜地恭喜大家,其实,递归地尝试让自己学习并熟练掌握PHP语言,并不是一种负担,而是一种享受,大家应该都深有感受。
使用递归的还贷进度计算器
<?php
设定贷款余额
$balance=10000.00;
设定贷款利率
$interestRate=0.0575;
设定每个月的利率
$monthlyInterest=$interestRate/12;
设定贷款年限,这里设定为5年
$termLength=5;
每年支付还贷的次数
$paymentsPerYear=12;
设定支付编号,次序
$paymentNumber=1;
决定并设定好总的支付还贷次数
$totalPayments=$termLength*$paymentsPerYear;
决定定期付款的利息部分
$intCalc=1+$interestRate/$paymentsPerYear;
决定定期付款,用到了pow()函数用来求x的y次方的值。
$periodicPayment=$balance*pow($intCalc,$totalPayments)*($intCalc-1)/(pow($intCalc,$totalPayments)-1);
将定期付款保留到小数点后的两位,用到了round()函数进行四舍五入运算。
$periodicPayment=round($periodicPayment,2);
创建一个表格
echo “<table width=’50%’ align=’center’ border=’1’>”;
指定表格宽度设定为50%,排列方式为居中,边框的厚度设定为1像素
echo “<tr>
<th>Payment Number</th><th>Balance</th> th标签定义了HTML表格中的表头单元格
<th>Payment</th><th>Interest</th><th>Principal</th>
</tr>”;
调用递归函数,传入四个参数,支付编号,定义付款,贷款余额,每月的利率
amortizationTable($paymentNumber,$periodicPayment,$balance,$monthlyInterest);
关闭表格
echo “</table>”;
?>
为了程序代码的重用性(方便以后的重复使用代码,对于懒惰的程序员而言,这未尝不是一件福音,大家说是吧。),开始产生了函数库。
<?php
function localTax($grossIncome,$taxRate){ 定义了一个地方税localTax函数,传入了两个参数,总收入$grossincome,税率$taxRate
//函数体
}
function stateTax($grossIncome,$taxRate,$age){ 定义了一个州税stateTax函数,传入了三个参数,总收入$grossIncome,税率$taxRate,年龄$age
//函数体
}
function medicare($grossIncome,$medicareRate){ 定义了一个医疗保险费medicare函数,传入了两个参数,$grossIncome总收入,$medicareRate医疗保险费率
//函数体
}
avatar
langlangname
33楼
在PHP这门语言中,数组它提供了一种理想的方法来存储,操作,排序和获取数据集。(你其实可以定义一个你所拥有的好朋友的数据集作为你所钟爱的数组。一个看似简单的概念,很多时候,好像可以蕴含很多不一样的东西。)
传统上把数组定义为一组有某种共同特性的元素。当然,数组中的元素甚至可以不属于同一种类型。数组结构中的实体包含两个项:键(key)和值(value)。可以通过查询键来获取其相应的值。这些键可以是数值键或关联键。数值键的例子:
$states=array(0=>”Alabama”,”1”=>”Alaska”...”49”=>”Wyoming”); 其实这个例子中的数值键与值没有真正的联系,它们只是值在数组中的位置。很多看似很明显的东西,通过这个例子好像看不出什么,但,或许,挺明显的。它只是为了更好地显示这个数组中的数据。
使用数值索引,可以如下引用第1个州(Alabama):
$states[0]
PHP中的数值索引数组以位置0开始,而不是1。
当然,关联键与值有一定关系。下面这个例子:
$states=array(“OH”=>”Ohio”,”PA”=>”Pennsylvania”,”NY”=>”New York”)
如果要引用Ohio这个值,可以通过如下调用
$states[“OH”]
还可以创建包含数组的数组,这称为多维数组。(在数据集中还有数据集,就像我中有了你之后,我跟你之间的友情,就蜕变成为了一种非常奇怪的存在。但,这种存在是有意义的。然后就被定义为了是多维数组的一种转化。)
例如,可以使用一个多维数组存储美国各州的信息。
$states=array(
“Ohio”=>array(“population”=>”11,353,140”,”capital”=>”Columbus”),
“Nebraska”=>array(“population”=>”1,711,263”,”capital”=>”Omaha”)
);
然后可以如下引用Ohio的入口:
$states[“Ohio”][“population”]
数组里面其实有数组指针这个概念,数组指针就如同书签,告诉你正在检查的数组位置。(就像你开车通过GPS导航来定位路是一样的道理。有了数组指针的指引,就知道自己到底到了数组的什么位置。)
当然了,PHP不需要在创建数组时指定其大小。
因为数组没有大小限制,所以只需建立引用就可以创建数组。
$state[0]=”Delaware”;
然后可以打印输出数组$states的第一个元素:
echo $state[0];
接下来,可以为数组索引映射新值,从而添加其他的值:
$state[1]=”Pennsylvania”;
$state[2]=”New Jersey”;
...
$state[49]=”Hawaii”;
当然,其实也可以在创建时省略索引值:(该忽略的时候,你就发现你可以忽略很多看似不存在但却是固定的编程烦恼。)
$state[]=”Pennsylvania”;
$state[]=”New Jersey”;
...
$state[]=”Hawaii”;
下面的示例创建了一个数组:它将美国州名映射到其加入联邦的日期:
$state[“Delaware”]=”December 7,1787”;
$state[“Pennsylvania”]=”December 12,1787”;
$state[“New Jersey”]=”December 18,1787”;
...
$state[“Hawaii”]=”August 21,1959”;
当然,用array()创建数组比起以上的这种方式,更加显得正式。英文名称很多时候确实很直接,但却也非常值得这样来使用。
array()的数组形式:
array array([item1[,item2...[,itemN]]])
下面举一个使用array()创建数组索引的例子:
$languages=array(“English”,”Gaelic”,”Spanish”);
这里$languages[0]=”English”,$languages[1]=”Gaelic”,$languages[2]=”Spanish”
还可以用array()创建一个关联数组:
$languages=array(“Spain”=>”Spanish”,
“Ireland”=>”Gaelic”,
“United States”=>”English”);
这样一来$languages[“Spain”]=”Spanish”
$languages[“Ireland”]=”Gaelic”
$languages[“United States”]=”English”
通过相应的索引确实能够访问到相应的键值。(人生中索引,或许真的能够指引你今后人生路上的方向。而不单单只是一种指引。)
avatar
langlangname
34楼
list()函数与array()类似,可以在一次操作中从一个数组内提取多个值,同时为多个变量赋值。(你可以怀念你曾经的所有朋友,通过照相本的方式来找回,同时也可以通过自己的思想找出那些看似不存在的朋友们。通过list()函数就是实现类似的功能。)
void list(mixed...)
下面显示了如何使用list()同时为多个变量赋值:
打开users.txt文件
$users=fopen(“users.txt”,”r”); 以只读模式通过fopen函数打开users.txt文本
当没有到达文件末尾的时候,跳到下一行
while($line=fgets($users,4096)){
从$users指向的users.txt文件中读取一行并返回长度最多为4095字节的字符串。
//使用explode()去分隔每个数据片,并赋值给$name,occupation,$color。
list($name,$occupation,$color)=explode(“|”,$line);
格式化并输出数据
prinf(“Name:%s<br/>”,$name); 以%s字符串的格式打印Name
printf(“Occupation:%s<br/>”,$occupation);
printf(“Favorite color:%s<br/>”,$color);
}
fclose($users);
然后会读取users.txt文件的每一行,并如下格式化:
Name:Nino Sanzi
Occupation:professional golfer
Favorite Color:green
list()依靠函数explode()将一行分解为三个元素,这里explode()使用竖线作为元素分隔符,然后,这些元素分别赋给了$name,$occupation,$color。
range()函数是一个快速填充数组的简单方法,并会使用low到high范围的整数值填充数组。
array range(int low,int high,[,int step])
假设需要一个数组,其中包含骰子中所有可能出现的值:
$die=range(0,6); 等同于列举出一个数组$die=array(0,1,2,3,4,5,6)
如果希望有一个包含0到20之间所有偶数的数组,就可以使用步长值为2:
$even=range(0,20,2);
这里$even=array(0,2,4,6,8,10,12,14,16,18,20);
range()函数还可以用于字符序列。假设希望创建一个包含字母A到F的数组:
$letters=range(“A”,”F”);
//$letters=array(“A”,”B”,”C”,”D”,”E”,”F”);
数组的输出通常使用print_r()函数完成,其原型如下:
boolean print_r(mixed variable[,boolean return])
print_r()函数接受一个变量,并将其内容发送给标准输出,成功时返回TRUE,否则返回FALSE。
判断是否为数组的内置函数is_array()其形式为:
boolean is_array(mixed variable)
$states=array(“Florida”);
$state=”Ohio”;
printf(“\$states is an array:%s<br/>”,(is_array($states)?”TRUE”:”FALSE”)); 以%s字符串的格式输出数组$states
printf(“\$states is an array:%s<br/>”,(is_array($state)?”TRUE”:”FALSE”));
下面是执行该例子的结果:
$states is an array:TRUE
$state is an array:FALSE
其实对于数组而言,真正关键的是数组中的内容,到底是否应该定义一个自己内心深处真正应该关心的朋友的数组群,在孤单无依的时候有时候可以认真地回想起他们,毕竟,他们才是我们内心深处真正所渴望的那种存在。是对于我,对于你的依靠。编程的孤独,或许,就能够被彻底冲刷了吧。
avatar
langlangname
35楼
PHP为扩大和缩小数组提供了一些函数。FIFO(先进先出),LIFO(后进先出)其实是数据结构中的概念(FIFO相当于排队,谁先排在前面就先办好事情离开。LIFO的典型数据结构就是栈。后进来的元素可以先离开。其实元素离开就相当于删除元素。在栈这个数据结构中,先进来的元素可以先删除。你可以把我当作好朋友,思前想后,最后一个接纳进来,你也可以反悔,第一个删除我,这就是我对于栈,对于接纳朋友的理解。)。顾名思义,从这些函数的函数名(push,pop,shift和unshift)就能够清楚地反映出其作用。
array_unshift()函数在数组头添加元素,所有已有的数值键都会相应地修改,以反映其在数组中的新位置,但是关联键不受影响。
int array_unshift(array array,mixed variable [,mixed variable...])
下面这个例子在$states数组前端添加了两个州:
$states=array(“Ohio”,”New York”);
array_unshift($states,”California”,”Texax”);
这其实就相当于后来处理好之后的$states=array(“California”,”Texax”,”Ohio”,”New York”);
在数组尾添加元素
array_push()函数将variable添加到target_array()的末尾,成功时返回TRUE,否则返回FALSE。
可以为此函数传递多个变量作为输入参数,同时向数组压入多个变量(元素)。
int array_push(array array,mixed variable [,mixed variable...])
下面这个例子在$states数组的末尾又添加了两个州:
$states=array(“Ohio”,”New York”);
array_push($states,”California”,”Texax”);
这里$states=array(“Ohio”,”New York”,”California”,”Texas”);
array_shift()函数删除并返回数组中找到的元素。其结果是,如果使用的是数值键,则所有相应的值都会下移,而使用关联键的数组不受影响。其形式为:
mixed array_shift(array array)
下面的例子删除了$states数组中的第一个州:
$states=array(“Ohio”,”New York”,”Caifornia”,”Texas”);
$states=array_shift($states);
删除了元素之后的$states为array(“New York”,”California”,”Texas”)
获得了第一个元素之后的$states为”Ohio”
array_pop()函数删除并返回数组的最后一个元素。其形式为:
mixed array_pop(array target_array)
$states=array(“Ohio”,”New York”,”California”,”Texas”);
$state=array_pop($states);
这里删除了最后一个元素之后的$states为array(“Ohio”,”New York”,”California”)
得到了元素之后的$states为”Texas”
其实,不管是从数组头删除添加元素,还是数组尾删除添加元素,其实只是为了更好地理解数组的相应结构,改变并不可怕,最关键是如果尝试学习并适应这种改变。数组中相应的键和值其实都因为各自的关联而能够在删除和添加的时候产生作用,而使用关联键,或许是因为关联键自身的特殊性,所以,才能够不受影响。有些朋友对于你而言是很容易动摇的,就像数值键一样,而有些固定不变的朋友,不管你情况如何他们都不会改变,就像关联键一样。很多东西,看多了,适应了之后,就会发现,原来,我还是我,我的那些朋友们,或许有的已经改变,而有的,不用改变同时也无须改变。
avatar
langlangname
36楼
in_array()函数在数组中搜索一个特定值,如果找到这个值则返回TRUE,否则返回FALSE。其形式如下:(当你通过微信寻找某一个特定的微信好友的时候,你有时候会发现你脸上会浮现出一些特定的笑容,确实,应该用in_array()函数)
boolean in_array(mixed needle,array haystack [,boolean strict]) 第三个参数strict可选,它强制in_array()在搜索时考虑类型。
$state=”Ohio”;
$states=array(“Califonia”,”Hawaii”,”Ohio”,”New York”);定义了一个存放了四个州的数组
if(in_array($state,$states)) echo “Not to worrry,$state is smoke-free!”;
判断$state中的内容是否在数组$states内,判断成功之后实现打印的功能。
如果在一个数组中找到一个指定的键,函数array_key_exists()返回TRUE,否则返回FALSE。其形式如下:(其实对于数组而言,键也好,值也好,都是一种指引,一种指示,一种显示数组结构的尝试的方法。交朋友这种东西,有时候确实是近朱者赤近墨者黑,键相当于这个人的名声,而值相当于这个人的相关信息。要想获取一个你想结识的好友的信息,其实并不难。)
boolean array_key_exists(mixed key,array array)
下面的例子将在数组键中搜素Ohio,如果找到,将输出这个州加入美国联邦政府的有关信息:
$state[“Delaware”]=”December 7,1787”;
$state[“Pennsylvania”]=”December 12,1787”;
$state[“Ohio”]=”March 1,1803”;
if(array_key_exists(“Ohio”,$state)) 通过判断Ohio这个key是否在$state数组中出现过,判断成功打印一段英文,并以%s字符串的格式显示。
printf(“Ohio joined the Union on %s”,$state[“Ohio”]);
结果如下:
Ohio joined the Union on March 1,1803
array_search()函数在一个数组中搜索一个指定的值,如果找到则返回相应的键,否则返回FALSE。其形式如下:
mixed array_search(mixed needle,array haystack[,boolean strict])
下面的例子在$state中搜索一个特定的日期(December 7),如果找到,则返回相应州的有关信息:
$state[“Ohio”]=”March 1”;
$state[“Delaware”]=”December 7”;
$state[“Pennsylvania”]=”December 12”;
$founded=array_search(“December 7”,$state); 从$state数组中的值内查找是否有December 7如果有,返回相应的键。然后再以%s的格式显示并打印输出。
if($founded) printf(“%s was founded on $s.”,$founded,$state[$founded]);
输出如下:
Delaware was founded on December 7.
array_keys()函数返回一个数组,其中包含所搜索数组中找到的所有键,(我其实可以一下子搜索好几个微信好友并返回,其实都是通过他们的微信昵称来定位他们的。他们,应该也会非常欣喜吧。这里就要用到array_keys()函数。)其形式如下:
array array_keys(array array[,mixed search_value])
如果包含可选参数search_value,则只会返回与该值匹配的键。下面的例子将输出$state数组中找到的所有的键值:
$state[“Delaware”]=”December 7,1787”;
$state[“Pennsylvania”]=”December 12,1787”;
$state[“New Jersey”]=”December 18,1787”;
$keys=array_keys($state); 从$state数组中搜索所有键。
print_r($keys);
输出如下:
Array([0]=>Delaware [1]=>Pennsylvania[2]=>New Jersey)
这里将三个键都打印了出来,前面还加上了数值索引。
array_values()函数返回一个数组中的所有值,并自动为返回的数组提供数值索引,其形式如下:
array array_values(array array)
下面的例子将获取$population中找到的各州人口数:
$population=array(“Ohio”=>”11,421,267”,”Lowa”=>”2,936,760”);
print_r(array_values($population));
这个例子的输出如下:
Array([0]=>11,421,267[1]=>2,936,760)
其实,当你觉得你适合交朋友的时候,你可以用你所认为的认真,你所认为的PHP中的部分语法来定义出他们的数组集,同时还能够通过你自己的逻辑思维和判断来做一点看上去非常有趣的事。
avatar
langlangname
37楼
通常需要遍历数组并获得各个键或值,或者同时获得键和值。(微信的好友跟好友的昵称,看似好像没有太多关联,但,其实正是因为你时不时地会去朋友圈看看,逛一逛,当分享一些视频或者是发朋友圈的时候,其实你已经在做一些跟遍历有关的事了。也许,适应一个人在房间里面的孤独时,打开微信,稍微看一看,观察一下,你就会发现,原来通过遍历的方式来重新认识自己的旧朋友,新朋友,就是这么简单,同时也看似有趣。)
key()函数返回input_array中当前指针所在位置的键。其形式如下:
mixed key(array array)
下面的例子通过迭代处理数组并移动指针来输出$capitals数组的键:
$capitals=array(“Ohio”=>”Columbus”,”Iowa”=>”Des Moines”);
echo “

Can you name the capitals of these states?

”;
while($key=key($capitals)){ 通过key()函数获得$capitals中的键并赋值给$key
printf(“%s <br/>”,$key); 然后以%s字符串的形式打印出来
next($capital); 通过next()函数移动$capitals数组中的指针,移动到下一个数据,也就是从Ohio移动到lowa,其实调用key()函数时不会移动指针的。
}
将返回以下结果:
Can you name the capitals of these states?
Ohio
Iowa
current()函数返回数组中当前指针所在位置的数组值,其形式如下:
mixed current(array array)
以下的这个例子是获取数组值的:
$capitals=array(“Ohio”=>”Columbus”,”Iowa”=>”Des Moines”);
echo“

Can you name the states belonging to these capitals?

”;
while($capital=current($capitals)){ 通过current()函数获取数组$capitals中的当前数组值。并赋值给$capital
printf(“%s <br/>”,$capital);
next($capitals); 通过next()函数移动$capitals数组中的指针。
}
输出如下:
Can you name the states belonging to these capitals?
Columbus
Des Moines
each()函数返回input_array的当前键值对,并将指针推进一个位置。其形式如下:
array each(array array)
avatar
langlangname
38楼
avatar
langlangname
39楼
avatar
langlangname
40楼
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。