|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。中文 从HTML中离开
这儿有三种办法从HTML中离开,同时到场“PHP代码形式”
Example 5-1. 从HTML中离开的办法
1. <? echo("this is the simplest, an SGML processing instruction\n"); ?>
2. <?php echo("if you want to serve XML documents, do like this\n"); ?>
3. <script language="php">
echo ("some editors (like FrontPage) don't
like processing instructions");
</script>;
4. <% echo("As of PHP 3.0.4 you may optionally use ASP-style tags"); %>
语句的离开办法
语句的离开办法和C及PERL是一样的------终止每个语句时利用分号(;)。
停止标签(?>)也暗示了申明的停止,所以上面的两句话是等价的:
<php
echo "This is a test";
?>
<php echo "This is a test" ?>
变量类型
PHP撑持以下的变量类型:
integer :整数
double :双精度数
string :字符串
array :队列数组
object :对象
pdfdoc (only if enabled PDF support) :PDF文本(仅仅在升引PDF撑持以后失效)
pdfinfo (only if enabled PDF support) :PDF信息(仅仅在升引PDF撑持以后失效)
这些变量的类型凡是不由法式员来设置;出格的,它在运转时由PHP根据高低文来设置利用甚么类型。
假如您喜好强迫将某个变量转换到指定的类型,您还可以对该变量停止“cast”操作,或利用函数“settype()”。
注重这些变量能够会在肯定的情况下被分歧的掌握者利用,这依附于此时该变量的类型是甚么。想要取得更进一步的信息,请参考“Type Juggling”局部。
变量的初始化
在PHP中初始化一个变量,您只需求复杂的分拨给它一个值便可。关于大多半类型,如许做是非常复杂的;然而关于类型“Array(数组)和Objects(对象)”来讲,需求利用有些分歧的办法。
初始化数组
一个数组可使用以下的办法来初始化:利用一连的指定值,同时利用“array()”布局(这将在“Array 函数函数申明局部中被证实)。
对一个数组(Array)变量一连的添加值。您复杂指定无标号的Array变量的值便可。这些值会添加在该Array变量最初的元素中。
$names[] = "Jill"; // $names[0] = "Jill"
$names[] = "Jack"; // $names[1] = "Jack"
和在C和Perl中一样,数组元素的入手下手号码是0而不是1。
初始化object(对象)变量
要初始化object变量,您利用上面例子中所示的声名办法:
class foo {
function do_foo () {
echo "Doing foo.";
}
}
$bar = new foo;
$bar -> do_foo ();
变量的举动局限
变量的举动局限仅仅限于界说它的高低文。关于绝大多半局部中一切的PHP变量仅仅只要独自的举动局限。但是,在用户自界说的函数中,引入了一个当地函数局限的概念。在这个函数中利用的任何变量缺省被限制在该函数的当地函数局限当中。例如:
$a = 1; /* global scope */
Function Test () {
echo $a; /* reference to local scope variable */ }
Test ();
这段剧本将不会形成任何的输入,由于给显示的提交给当地译文的变量“$a”的声名,同时这个变量没有在它的举动局限中被指定一个值。您可以注重到这和C言语有一些分歧,在C言语中全局变量是主动被设定为可用的,除非在函数中停止了出格的申明。因为人们能够会不当心的改动了全局变量的值,所以这可会在法式中招致很多成绩。在PHP中全局变量必需在一个函数中被通知布告,假如想要在这个函数中利用它的话。例子以下:
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;
下面的剧本将输入“3”。在函数中声名了全局变量$a和$b,任何对这两个变量的援用都被指定到了该全局变量。这里没有函数可以操作的限制全局变量的数量。
第二种承受全局变量的办法是利用PHP特别的界说数组$GLOBALS,例子以下所示:
$a = 1;
$b = 2;
Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum ();
echo $b;
$GLOBALS数组是一个结合数组利用“global”为变量的名字,全局变量作为该变量数组个中某个元素的值。
另外一个关于变量举动局限的主要特征是“静态变量”。一个静态变量仅仅在当地函数的举动局限中存在,然而当法式分开这个局限时,它的值其实不丧失。请参考上面的例子:
Function Test () {
$a = 0;
echo $a;
$a++;
}
这个函数每次被挪用时都把变量$a置为0同时打印“0”,所以几近是没有感化的。表达式“$a++”将增添变量的值,然而每次加入函数时变量$a就消逝了。想要利用一个不丧失以后盘算的记数函数,用户可以将变量$a设置为静态的,示例以下:
Function Test () {
static $a = 0;
echo $a;
$a++;
}
如今,每次当Test()函数被挪用的时分,它将打印出变量$a和它事先增添以后的数值。
当函数被递归挪用的时分,利用静态变量是一种很主要的办法。递归函数就是可以挪用本身的函数。当编写递归函数的时分,必需注重能够会产生的轮回界说。您必需有一个恰当的办法来中止这个递归进程。上面的例子递归了10次:
Function Test () {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test (); }
$count--;
}
变更变量
有些时分利用变更变量是非常便利的。也就是说,一个变量的名字将主动态的设置和利用。一个通俗的变量将会利用以下的声名:
$a = "hello";
一个变更变量取得一个变量的值,并将其视该变量的名字。在下面的例子中,“hello”,可以利用变量的名字加上两个$来停止利用,例如。
$$a = "world";
在这一点上,两个变量被界说和存储在PHP的符号树上;$a的内容为“hello”,而$hello的值为“world”。因而以下的声名:
echo "$a ${$a}";
制造了和以下切实不异的输入:
echo "$a $hello";
他们都输入:“hello world”
要在数组中利用变更变量,您必需处理一个暧昧的成绩。它是:假如您写入了“$$a[1]”,然后解析法式将需求晓得您想利用$a[1]作为变量仍是利用$$a作为变量,如许索引“[1]”能够就会产生歧义。处理这类歧义的语法以下:“${$a[1]}”或利用“${$a}[1]”(对上述的第二种情形)。
外界PHP变量
HTML表单(GET和POST)
当表单被提交给PHP剧本时,从该表单取得的变量将主动的被该PHP剧本设置为可用。请参考以下示例:
Example 5-2. Simple form variable (复杂的表单变量)
<form action="foo.php3" method="post">
Name: <input type="text" name="name"><br>
<input type="submit">
</form>
当提交以后,PHP将创立一个变量“$name”,它将包括任安在表单中输出在“Name”中的内容。
PHP同时也晓得若何布置表单变量的高低文关系,然而仅仅限于一次。您可以,例如,将一组变量同时叙说,或利用这个特征来从头从多重选择输出中取得值:
Example 5-3. More complex form variables
<form action="array.html" method="post">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog
<option value="guinness">Guinness
</select>
<input type="submit">
</form>
假如PHP的track_var特征被翻开了,任何干于它的布局设置或<?php_track_vars?>唆使,然后经过POST或GET形式的变量提交将觉察利用全局结合数组“$HTTP_POST_VARS”和“$HTTP_GET_VARS”是适合的。
图形提交变量名字
当提交一个表单时,有能够利用一幅图像来取代尺度的带标签的提交按钮,例如:
<input type=image src=http://www.163design.net/p/a/"image.gif" name="sub">
当用户点击该图像的任何地位时,响应的表单将被利用两个附加的变量(sub_x和sub_y)来传送到办事器上。他们包括用户点击在该图形上的响应地位信息。这将包括从阅读器收回的真实变量名字(乃至包括下划线),然而PHP将会把它主动的转化成带下划线的模式。
HTTP Cookies
PHP固然的撑持利用Netscape's Spec界说的HTTP Cookies。Cookies是一种在近程阅读器上寄存数据的安装,用于跟踪和判定用户的身份。您可使用SetCookie()函数来对cookies停止设置。Cookies是HTTP头的一局部,所以SetCookie法式必需在被停止向阅读器输入前被挪用。这和Header()函数的设置是相似的。任何从办事器送到用户处的cookies将主动的被转化成为一个PHP变量,就象利用GET和POST形式的数据一样。
假如您但愿对单个的cookie分拨多值,只需在cookie的名字前面复杂的加上一个“[ ]”便可。例如:
SetCookie ("MyCookie[]", "Testing", time()+3600);
注重,假如不是在您的阅读器上的域或途径纷歧样的话cookie将会利用不异的名字来顶替先前的一个cookie。所以,关于购物单使用法式,您能够但愿坚持一个计数器同时经由过程cookie来传送它,例如:
Example 5-4. SetCookie Example (设置Cookie的例子)
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
情况变量
PHP主动的利用情况变量作为PHP的通俗变量,例子以下。
echo $HOME; /* Shows the HOME environment variable, if set. */
既然信息伴同GET,Post,Cookie等机制被传递出去,而且主动创立了PHP变量,有时最好是正确的从外界情况中读出一个变量以确信你正在利用准确的版本。getenv()函数就是做这个任务的,你也能够利用putenv()函数来设置一个情况变量。
办事器设置唆使
变量类型变更(juggling)
PHP不需求(或说不撑持)在申明变量明白他的变量类型;一个变量的类型是由这个变量被利用的前后关系来决意的,也就是说,假如你给一个变量var赋了一个字符串的值,var就酿成了字符串变量。假如你再将一个整数赋值给var,他又酿成了一个整数型变量。
一个PHP主动转化变量类型的例子是加法的操作符’+’。假如任何一个操作数都是双精度数,那末一切的操作数被看成双精度数求值,而且了局也是双精度数。不然,操作数将被以为是整数,了局也将会是整数。注重这其实不影响每一个操作数自己的变量类型,独一的变更就是操作数在盘算的过程当中被若何处置。
$foo = "0"; // $foo 是一个字符串 ,值是“0”(ASCII 48)
$foo++; // $foo 是一个字符串,值是“1”(ASCII 49)
$foo += 1; // $foo 如今是一个整数(2)了
$foo = $foo + 1.3; // $foo 如今是一个双精度数(3.3)了
$foo = 5 + "10 Little Piggies"; // $foo 是一个整数 (15)
$foo = 5 + "10 Small Pigs"; // $foo 是一个整数 (15)
假如你感觉下面例子中最初两个表达式看起来有点奇异的话,请看 “字符串的转化”局部。
假如你但愿强迫一个变量被看成某种固定的类型来盘算,请看 “类型强迫(casting)” 一节。假如你但愿改变一个变量的类型,请看函数“settype()”的申明。
肯定一个变量的类型
由于PHP本人决意变量的类型而且普通依照需求转化他们,一个特定的变量的类型不是在任什么时候间都十分分明。PHP包含一些函数可以找出这个变量的类型。这些函数是gettype(), is_long(), is_double(), is_string(), is_array(), 和 is_object().
类型强迫(type casting)
在PHP中类型强迫同在C言语中大略类似:将需求的类型的品种写在要强迫的变量的后面的圆括号中。
$foo = 10; // $foo 是一个整数
$bar = (double) $foo; // $bar 是一个双精度数
以下的强迫体例是答应的:
(int), (integer) C 强迫成整数
(real), (double), (float) C 强迫成双精度数
(string) C 强迫成字符串
(array) C 强迫成数组
(object) C 强迫成对象
注重在圆括号中答应制表符(tabs)和空格(spaces) ,因而上面的语句是等价的:
$foo = (int) $bar;
$foo = ( int ) $bar;
字符串转化
当一个字符串被看成数字型的值来盘算时,他的了局和类型以下面所述的决意。
假如这个字符串含有字符’.’,’e’,或’E’,则被看成双精度类型变量来处置,不然看成是整数。
这个字符串的值由词首局部决意。假如这个字符串以任何无效的数字的数据入手下手,那末这个数字数据就是这个字符串列入运算的值。不然,值为零(zero)。无效的数字数据是遵守上面的这些标志的,跟从在一个或多个数字前面(可以包括小数点),跟从在一个可选的指数前面。指数是由一个或多个数字跟在’e’或’E’前面组成的。
$foo = 1 + "10.5"; // $foo 是双精度数 (11.5)
$foo = 1 + "-1.3e3"; // $foo 是双精度数(-1299)
$foo = 1 + "bob-1.3e3"; // $foo 是整数 (1)
$foo = 1 + "bob3"; // $foo 是整数 (1)
$foo = 1 + "10 Small Pigs"; // $foo 是整数 (11)
$foo = 1 + "10 Little Piggies"; // $foo 是整数 (11);
// 这个字符串包含字符'e'
为了获得更多信息,请参考Unix手册关于strtod(3)的局部。
数组操作
PHP同时撑持标量数组(scalar array)和联系关系数组(associative arrays)。现实上,这二者之间没有任何区分。你可使用函数list()或array()来创立数组,或你可以明白的设置每个数组元素的值。
$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
你也能够经由过程向数组里添加数值来创立数组。
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world"
数组可以经由过程函数 asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), 和ksort() 来停止排序,详细利用那一个函数要依据你所想的排序的类型来定。
你可使用cunt( )函数来统计数组中元素的个数。
你可使用next()和prev()函数来遍历数组。另外一个通俗的遍历数组的体例是利用函数each()。
开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。 |
|