php快速入门总结

因为本人已经接触了C和C++两年多了,虽然真正用它们的机会很少,但是基本的语法还是相对熟悉的。半年前的课程设计用了PHP,所以当初我也只是现学先用,

学得很粗糙,现在,跟一个同学合作搞一个比赛的项目,再次接触PHP才发现,我对PHP的很多概念还是不清楚。故借此机会,总结一下PHP的一些知识点。注意,

以下总结是针对已有其他语言背景而想学PHP的读者。

 

参考书 <<PHP和MySql Web 开发>>

1.在字符串的连接上,若是在双引号中,变量名称将被变量值所替代,若是在单引号中,变量名称或者任何其他文本都将不经修改而发送给浏览器。因为PHP是一个

Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,按字符串输出一般方法的话,肯定要有大量的转义符来对字符串中的

引号等特殊字符进行转义,以免出现语法错误。在这种情况下,我们一般使用的是定界符

<<<Eof 
…… 
Eof;

(注:在<<<之后的字符Eof是自己定义的,随便什么都是可以的(比如AAA都可以),但是结尾处的字符一定要和他一样,他们是成对出现的,就像{}这样的——这是

最基本的;结尾的一行(如上例的Eof;),一定要另起一行,并且改行除了Eof;这个定界符结尾标识之外不能有任何其他字符,前后都不能有,包括空格)

 

(1).PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西; 
(2).在PHP定界符中的任何特殊字符都不需要转义; 
(3).PHP定界符中的PHP变量会被正常的用其值来替换。

(4)如果在定界符中间出现有PHP的变量,你只需要像在其它字符串中输出一样写就行了.代码如下:


<<<Eof 
hello{$name} 
Eof; 
变量$name之所以要用{}括起来是要告诉PHP解析器这是一个PHP变量,其实不用也是可以的,但是有可能会产生歧义,例如你的变量后面刚好不是一字母或者特殊符号什么的。
因此,定界符文本表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不需要转义引号,方便使用,如下
<?php
echo <<< EOT
                  <table width=80% border="2" cellpadding="3" cellspacing="0" bordercolor="#808080">
                 <tr bgcolor="#84A9E1">
                 <td align="center">ClassID</td>
                 <td align="center">stuno</td>
                 <td   align="center">学生姓名</td>
                 <td align="center">家长姓名</td>
                 <td align="center">家长手机号</td>
                 </tr>
EOT;
?>
 
 
2.PHP的基本数据类型有Integer(整数),Float(浮点数也叫Double),String,Boolean,Array,Object,NULL和resource(资源)。
PHP中的Array数组类型实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列
表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
例如:
<?php
$array 
= array(
    
"foo" => "bar",
    
42    => 24,
    
"multi" => array(
         
"dimensional" => array(
             
"array" => "foo"
         
)
    )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

以上例程会输出:

string(3) "bar"
int(24)
string(3) "foo"

特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL

在下列情况下一个变量被认为是 NULL

  • 被赋值为 NULL

  • 尚未被赋值。

  • 被 unset()

在PHP中,变量的类型是由赋给它的值所决定的,如,当我们创建$testVar时,就确定了他们的原始类型,如下:

$testVar=0;

$testVarTwo=0.0;

由于我们将0赋给$testVar,所以$testVar就是一个整数类型的变量,而$testTwoVar则是一个浮点型的变量。更为灵活的是,PHP可以在任何时间

透明地改变变量的类型,如

$testTwoVar="Hello";

现在的$testTwoVar就可以是字符串类型了,从浮点数变为字符串类型。

3.PHP的可变变量:可变变量名指的是使用一个变量的值作为这个变量的名称,如下

<?php 

$a = 'hello';

$$a='world';

?> 

两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”.

4.

在PHP中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等.
  内置超级全局变量可以在脚本的任何地方使用和可见。即如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。

  • 常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面中就不能使用了。
  • 在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。
  • 函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。
  • 在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。
  • 在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。

超级全局变量的完整列表如下

    • .$GOBALS 所有全局变量数组
    • .$_SERVER 服务器环境变量数组
    • .$_POST 通过POST方法传递给该脚本的变量数组
    • .$_GET 通过GET方法传递给该脚本的变量数组
    • .$_COOKIE cookie变量数组
    • .$_FILES 与文件上传相关的变量数组
    • .$_ENV 环境变量数组
    • .$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE 所包含的输入内容
    • .$_SESSION 会话变量数组
该知识点请参考:http://www.cnblogs.com/qiantuwuliang/archive/2010/03/08/1680548.html

5.
bool empty ( mixed $var ) 与bool isset ( mixed $var [, mixed $... ] )

前者,如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""0"0"NULLFALSEarray()var $var; 以及没有任何属性的对象都将被认为是空的,

如果 var 为空,则返回 TRUE

后者,检测变量是否设置,并且不是 NULL。如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 

FALSE。同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数。

<?php
$var 
0;

// 结果为 true,因为 $var 为空
if (empty($var)) {  
    echo 
'$var is either 0 or not set at all';
}

// 结果为 false,因为 $var 已设置
if (!isset($var)) { 
    echo 
'$var is not set at all';
}
?>
6.

PHP中的循环结构大致有for循环while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:

代码:

<?php

$i = 1;
while (true) { // 这里看上去这个循环会一直执行
    if ($i==2) {// 2跳过不显示
        $i++;
        continue;
    } else if ($i==5) {// 但到这里$i=5就跳出循循环了
        break;
    } else {
        echo $i . '<br>';
    }
    $i++;
}
exit;

echo '这里不输出';
?>

结果:

1
3
4

continue

continue 是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一 次循环。

如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。

例如在下面的这段PHP代码片段中:
<?php
for($i = 1;$i <= 100; $i++ ){
if($i % 3 == 0 || $i % 7 == 0){
continue;
}
& #160;  else{
echo”$i \n<br/>”;
}
}
?>

PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行 continue;语句,

就直接进入了下个循环。不会执行下面的输出语句了。

break

break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语 句。break语句可以带一个参数n,表示跳出循环的层数,

如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。

看下面这个多重循环嵌套的例子:
for($i = 1;$i <= 10; $i++ ){
for($j = 1;$j <= 10;$j++){
$m = $i * $i + $j * $j;
echo”$m \n<br/>”;
if($m < 90 || $m > 190) {
break 2;
}
}
}

这里使用了break 2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。

goto

goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读 性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,

goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出 循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
下面的是一个使用了goto跳出循环的例子
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) <= 29){
goto a;
}
echo “$i”;
}
a:
echo” this is the end”;

例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。

exit

exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数 是字符串,PHP将会直接把字符串输出,

如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。

<?php
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) >= 29){
echo”$i \n<br/>”;
}
else{
exit;
}
}
echo”本行将不会被输出”;
?>

上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web 页面里面,甚至连exit后面的html代码都不会被输出。

return

return 语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可 以是在主程序里调用,

如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序 执行将会马上返回到调用该文件的程序,而返回值将

作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停 止执行

<?php
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) >= 29){
echo”$i \n<br/>”;
}
else{
return;
}
}
echo”本行将不会被输出”;
?>

这里的例子和上面使用exit的效果是一样的。

在循环结束条件,自然跳出

参考:http://blog.sina.com.cn/s/blog_5f0d5bd90100mjyu.html

 




























posted @ 2013-12-07 11:05  拦云  阅读(1187)  评论(0编辑  收藏  举报