PHP基本语法大全
世上所有美好的感情加在一起,也抵不上一桩高尚的行动。以下是小编为大家搜索整理了PHP基本语法大全,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!
PHP标记
在之前的的例子中的PHP代码是以“”为结束,这类似于所有的HTML标记,因为它们都是以小于号为开始,以大于号为结束的。这些符号就叫做PHP标记。 PHP标记中有4中不同的风格供我们使用
*XML风格
这是我们以后将使用的标记风格。他是PHP推荐使用的标记风格,服务器管理员不能禁用这种风格的标记,因此可以保证正在所有的服务器上使用这种风格的标记,特别是编写用于不同服务器环境的应用程序时,这种标记风格尤为重要。这种风格的标记可以在XML(可扩展置标语言)文档中使用,如果打算在站点中使用XML,就必须使用这种风格的标记。
*简短风格
这种标记风格是最简单的,但要使用这种标记字符,必须在配置文件中启用short_open_tag选项,或者启用短标记选项编译PHP.我们不推荐使用这种标记,因为虽然该标记风格是当前默认启用的,但是系统管理员偶尔会禁用它,它会干扰XML文档的声明。
*SCRIPT风格
这种标记风格是最长的,使用过javascript或vbscript的人就会熟悉这种风格
*ASP风格
这种标记风格和ASP或ASP.NET的标记风格相同。如果在配置文件中启用了asp_tags选项就可以使用它
PHP输出语句
有两种通过 PHP 来输出文本的基础指令:echo 和 print。在上面的例子中,我们使用了 echo 语句来输出文本 "Hello World"。
PHP注释
对于阅读代码的人来说,注释其实就相当于代码的解释和说明。注释可以用来解释脚本的用途,脚本编写人,为什么要按如此的方法编写代码,上一次的修改时间等等,PHP支持C,C++和SHELL脚本风格的注释。
单行注释 # 或 //
多行注释 /* */
注意 : 单行注释可以嵌套在多行注释里使用的 但是多行注释是无法在嵌套的
echo "这是第一种例子。\n"; // 本例是 C++ 语法的注释 /* 本例采用多行的
注释方式 */
echo "这是第两种例子。\n";
?>
C 风格的注释在碰到第一个 */ 时结束。小心不要嵌套 C 风格的注释,当注释大量代码时,可能犯该错误。
/*
echo "This is a test"; /* This comment will cause a problem */
*/
?> echo "这是第三种例子。\n"; # 本例使用 UNIX Shell 语法注释
PHP数据类型
数据类型
四种标量类型:
? boolean(布尔型):表达了真值,可以为 TRUE 或 FALSE。
要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都不区分大小写。
$foo = True; // assign the value TRUE to $foo
?>
当转换为 boolean 时,以下值被认为是 FALSE:
?
?
?
?
?
? 布尔值 FALSE 整型值 0(零) 浮点型值 0.0(零) 空白字符串和字符串 "0" 没有成员变量的数组 特殊类型 NULL(包括尚未设定的变量)
注意:-1 和其它非零值(不论正负)一样,被认为是 TRUE!
? integer(整型)
integer 为整数型别。在 32 位的操作系统中,它的有效范围是 -2,147,483,648 到 +2,147,483,647 (2^31+符号位)。要使用 16 进位整数可以在面加 0x。 整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。
如果用八进制符号,数字前必须加上 0(零),用十六进制符号数字前必须加上 0x。
$a = 1234; // 十进制数
$a = -123; // 一个负数
$a = 0123; // 八进制数(等于十进制的 83)
$a = 0x1A; // 十六进制数(等于十进制的 26)
?>
? float(也叫浮点数,双精度数或实数)
浮点数为浮点数型别。在 32 位的操作系统中,它的有效范围是 1.7E-308 到
1.7E+308。(自然底数e=2.71828183)
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
?>
? string(字符串)
即为字符串变量,无论是单一字符或数千字的字符串都是使用这个变量类型。值得注意的是要指定字符串给字符串变量,要在头尾加上双引号 (例如: "这是字符串")。在要让字符串换行时,可使用溢出字符,也就是反斜线加上指定的
\xFE 即表十六进位字符,详见下表: 定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引号。下面的引号串都是合法的: $s = "I' m a student";
$s = ' I am a “student” ';
当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,于是:
"Why doesn't "this" work?"
实际上被PHP语法分析器分成三个部分:
"Why doesn't "——包含一个单引号的双引号串
this——多余的字符,分析器无法处理
" work?" ——普通字符串
上面的这个例子企图在双引号串中包含双引号,而分析器在遇到第二个双引号时便认为字符串结束了。要达到包含引号的目的, 必须分析器在遇到串内
普通引号的时候忽略它的原意,我们在引号的 前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:
"Why doesn't \"that\" work?"
字串可以使用字串连接符(.)来连接,如:
$first_name = 'A';
$last_name = 'B';
$full_name = $first_name . ' ' . $last_name;
注意:
echo $aa. ‘test
’;
echo "$aa test
";//在双引号中,变量名称被变量值替代
echo ’$aa test
’;;?>//在单引号中,变量名称或其他的文
本都会不经修改而发送给浏览器
复合类型:array object
? array(数组)
array 为数组变量,可以是二维、三维或者多维数组,其中的元素也很自由,可以是 string、integer 或者 double,甚至是 array。
可以用 array() 语言结构来新建一个 array。它接受一定数量用逗号分隔的 key => value 参数对。
key 只能是整数和字符串
$a = array( 1 => 'one', 2 => 'two', 3 => 'three' );
$a = array( 'one', 'two', 'three' );默认下标是从0开始
$MyArray1 = array("a", "b", "c", "d");//一维数组
$MyArray2 = array(
"地支" => array("子", "丑", "寅", "卯"),
"生肖" => array("鼠", "牛", "虎", "兔"),
"数字" => array(1, 2, 3, 4)
); //二维数组
$arr = array(12 => true,"foo" => "bar", false);
echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>
结果:bar1
$MyArray1 = array("a", "b", "c", "d");
echo $MyArray1[1];
print_r($MyArray1);
?>
结果:b(索引值从0开始)
数据类型强制转换:
$foo = 10; // $foo is an integer
$bar = (bool) $foo; // $bar is a boolean
?>
允许的强制转换有:
?
?
?
?
?
? (int),(integer) - 转换成整型 (bool),(boolean) - 转换成布尔型 (float),(double),(real) - 转换成浮点型 (string) - 转换成字符串 (array) - 转换成数组 (object) - 转换成对象
强制类型强制转换 (参考:PHP手册)
PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。 允许的强制转换有:
? (int),(integer) - 转换成整型
? (bool),(boolean) - 转换成布尔型
? (float),(double),(real) - 转换成浮点型
? (string) - 转换成字符串
? (array) - 转换成数组
? (object) - 转换成对象
注意在括号内允许有空格和制表符
还可以用settype ( mixed var, string type )进行强制转换.
1.强制转换为布尔值 (bool)|(boolean)
要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。
当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串和字符串 "0"
没有成员变量的数组
没有单元的对象(仅适用于 PHP 4)
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(包括任何资源)。
要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。
a.从bool转换
b.从浮点数转换 取整,超出范围,结果不定
c.从字符串转换 参看字符串转换为数值
d.从其它类型转换 先换成 bool值,再转换
决不要将未知的分数强制转换为 integer,这样有时会导致意外的结果。
echo (int) ( (0.1+0.7) * 10 ); // 显示 7
?>
$str = "123.456abc7"; // (int)123
echo (int)$str;
$str = "abc123.456"; // (int)0
$str = true; // (int)1
$str = false; // (int)0
3.强制转换为浮点型 (int)|(double)|(real)|doubleval()|floatval()|intval()
精度: 0.12345678901234 // double,real都一样
数据的丢失参 字符串转换为数值
4.强制换为字符串 (string) |strval()
可以用 (string) 标记或者 strval() 函数将一个值转换为字符串。当某表达式需要字符串时,字符串的转换会在表达式范围内自动完成。例如当使用 echo() 或者 print() 函数时,或者将一个变量值与一个字符串进行比较的时候。
? 布尔值 TRUE 将被转换为字符串 "1",而值 FALSE 将被表示为 ""(即空字符串)。这样就可
以随意地在布尔值和字符串之间进行比较。
? 整数或浮点数数值在转换成字符串时,字符串由表示这些数值的数字字符组成(浮点数还包含有
指数部分)。
? 数组将被转换成字符串 "Array",因此无法通过 echo() 或者 print() 函数来输出数组的内容。
请参考下文以获取更多提示。
? 对象将被转换成字符串 "Object"。如果因为调试需要,需要将对象的成员变量打印出来,请阅
读下文。如果希望得到该对象所依附的类的名称,请使用函数 get_class()。自 PHP 5 起,如果合适可以用 __toString() 方法。
? 资源类型总是以 "Resource id #1" 的格式被转换成字符串,其中 1 是 PHP 在运行时给资源
指定的唯一标识。如果希望获取资源的类型,请使用函数 get_resource_type()。
? NULL 将被转换成空字符串。
正如以上所示,将数组、对象或者资源打印出来,并不能提供任何关于这些值本身的有用的信息。请参阅函数 print_r() 和 var_dump(),对于调试来说,这些是更好的打印值的方法。
可以将 PHP 的值转换为字符串以永久地储存它们。这种方法被称为序列化,可以用函数 serialize() 来完成该操作。如果在安装 PHP 时建立了 WDDX 支持,还可以将 PHP 的值序列化为 XML 结构。
4. 强制转换为数组 (array)
? 对于任何的类型:整型、浮点、字符串、布尔和资源,如果将一个值转换为数组,将得到一个仅
有一个元素的数组(其下标为 0),该元素即为此标量的值。
? 如果将一个对象转换成一个数组,所得到的数组的元素为该对象的属性(成员变量),其键名为
成员变量名。
? 如果将一个 NULL 值转换成数组,将得到一个空数组。
5. 转换为对象 (object)
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,内置类
stdClass 的一个实例将被建立。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值
6. 转换为资源 (无法转换)
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此无法将其它类型的值转换为资源。
■PHP 类型比较表(看手册附录P)
以下的表格显示了 PHP 类型和比较运算符在松散和严格比较时的作用。该补充材料还和类型戏法的相关章节内容有关。
? 注意
?
? HTML 表单并不传递整数、浮点数或者布尔值,它们只传递字符串。要想检测一个字符串是不是数字,可以使用 is_numeric() 函数。 在没有定义变量 $x 的时候,诸如 if ($x) 的用法会导致一个 E_NOTICE 级别的错
误。所以,可以考虑用 empty() 或者 isset() 函数来初始化变量。
PHP常量
常量:
合法的常量名以字母(由大写字母组成和C语言一样)或下划线开始,后面跟着任何字母,数字或下划线。
常量和变量不同:
常量前面没有美元符号($);
? 常量只能用 define() 函数定义,而不能通过赋值语句;
? 常量可以不用理会变量范围的规则而在任何地方定义和访问;
? 常量一旦定义就不能被重新定义或者取消定义; ?
常量只能包含标量数据(boolean,integer,float 和 string)。 常量的范围是全局的。不用管作用域就可以在脚本的任何地方访问常量 define() 的功能可以让我们自行定义所需要的常量。见下例
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.
?>
PHP变量
变量:
变量用一个美元符号($)后面跟变量名来表示。变量名是区分大小写的。 一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字或
下划线。
PHP 是一门松散类型的语言(Loosely Typed Language)
在 PHP 中,不需要在设置变量之前声明该变量。
在上面的例子中,您看到了,不必向 PHP 声明该变量的数据类型。
根据变量被设置的方式,PHP 会自动地把变量转换为正确的数据类型。
在强类型的编程语言中,您必须在使用前声明变量的类型和名称。
在 PHP 中,变量会在使用时被自动声明。
可变变量(variable variable):
$$a = '张三';?>
这个代码等价于:$name = 张三;
$a = "Hello"; $$a = "world";
echo "$a, $hello"; // Hello, world echo "$a, {$a}"; // 也是 Hello, world ?>
变量范围(作用域):
作用域是指在一个脚本中某个变量在哪些地方可以使用或可见。 全局变量(global variable):
$a = 1;$b = 2;
function Sum(){
global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> 输出是’3’
局部变量(local variable):任何用于函数内部的变量将被限制在局部函数范围内。
$a = 1; /* global scope */ function Test(){
($a = 2 ;)
echo $a; /* reference to local scope variable */ } Test(); ?> 什么也不输出
静态变量(static variable):在函数退出时, 这个变量始终存在,不被销毁, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。
// 静态变量的例子 function myfunc() { static $mystr; $mystr.="哈"; echo $mystr."
\n"; }
myfunc(); // 哈 myfunc(); // 哈哈 myfunc(); // 哈哈哈 ?>
PHP运算符
使用操作符:操作符是用来对数值和变量进行某种操作运算的符号。 学过的两个操作符:赋值操作符(=)和字符串连接操作符(.)。 算数操作符:
(“/”)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。
注: 取模 $a % $b 在 $a 为负值时的结果也是负值。
echo $a+$b."
\n"; echo $a-$b."
\n"; echo $a*$b."
\n"; echo $a/$b."
\n"; echo $a%$c."
\n"; ?>
注意:(*)作为乘法操作符,而不是常规的乘法符号。除法操作符同理。
字符串运算符:
有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!" ?>
赋值运算符:
基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3。
$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。 ?>
括号提高子表达式的优先级
复合赋值操作符:
增加程序的执行效率。
$a += 2; // 即 $a = $a + 2; echo $a."
\n"; $b = "哇";
$b .= "哈"; // $b = "哇哈"; $b .= "哈"; // $b = "哇哈哈"; echo "$b
\n"; ?>
递增/递减运算符:
注: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。注意字符变量只能递增,不能递减。
比较运算符: 比较两个值。根据比较结果返回: false。 比较运算符: 比较两个值。根据比较结果返回:true 或 false。例子名称结果 TRUE,如果 $a 等于 $b。 TRUE TRUE,如果 $a 不等于 $b。 TRUE TRUE,如果 $a 不等于 $b。 TRUE TRUE,如果 $a 严格小于 $b。 TRUE- 16 -$a == $b 等于 $a != $b 不等 $a <> $b 不等 $a < $b 小与
例子名称结果 TRUE,如果 $a 严格 $b。 TRUE$a > $b 大于$a <= $b 小于等于 TRUE TRUE,如果 $a 小于或者等于 $b。 $a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。 TRUE逻辑运算符: 逻辑运算符:例子名称结果 TRUE,如果 $a 与 $b 都为 TRUE TRUE。 TRUE TRUE,如果 $a 或 $b 任一为 TRUE TRUE。 TRUE$a and $b And(逻辑与) $a or $b Or(逻辑或)$a xor $b Xor(逻辑异或) TRUE TRUE,如果 $a 或 $b 任一为 TRUE TRUE,但不同时是。 ! $a Not(逻辑非) TRUE,如果 $a 不为 TRUE TRUE。 TRUE TRUE,如果 $a 与 $b 都为 TRUE TRUE。 TRUE TRUE,如果 $a 或 $b 任一为 TRUE TRUE。 TRUE$a && $b And(逻辑与) $a || $b Or(逻辑或)“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同 - 17 -
PHP 语句条件判断语句: 条件判断语句: 第一种是只有用到 if 条件, 当作单纯的判断。 解释成 "若发生了某事则怎样 处理"。 if (expr) { statement } 其中的 expr 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断 的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括 号 {}。 范例:本例省略大括号。 范例:本例的执行部分有三行,不可省略大括号。 第两种是除了 if 之外,加上了 else 的条件,可解释成 "若发生了某事则怎样处理, 否则该如何解决"。范例:上面的例子来修改成更完整的处理。其中的 else 由于只有一行执行的指令,因 此不用加上大括号。
} ?>如果当前日期是周五,下面的.代码将输出 "周末愉快!",否则会输出 "美好的一天!": 如果需要在条件成立或不成立时执行多行代码,应该把这些代码行包括在花括号中: 3
第三种就是递归的 if..else 循环,通常用在多种决策判断时。它将数个 if..else 拿 来合并运用处理。 直接看下面的例子 $b) { echo "a 比 b 大"; } elseif ($a == $b) { echo "a 等于 b"; } else { echo "a 比 b 小"; } ?> 上例只用二层的 if..else 循环,用来比较 a 和 b 两个变量。实际要使用这种递归 if..else 循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少 打了大括号等,都会造成程序出现莫名其妙的问题。如果当前日期是周五,下面的例子会输出 "周末愉快!",如果是周日,则输出 "星期天愉快!",否则输出 " 美好的一天!":
else echo "美好的一天!"; ?> do..while 是重复叙述的循环,可以分成两种模式。 最单纯的就是只有 while 的循环。用来在指定的条件内,不断地重覆指定的步骤。语 法如下 while (expr) { statement } 其中的 expr 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断 的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括 号 {}。 下例很有趣,要电脑的浏览器出现十次 "以后不敢了" 的字符串,前面并加上数字,表 示说了第几次不敢了。(感觉好像是 Web Server 做错事被处罚) while 可以不用大括号来包住执行部分,而使用冒号加上 endwhile。见下例
endwhile; ?> 另外一种 do..while 循环则先执行,再判断是否要继续执行,也就是说循环至少执行 一次, 有点像是先斩后奏的方法。 这种的循环, 和单用 while 是不同的 (单用 while 是 先判断再处理)。若读者熟 Pascal 语言的话,会发现 do..while 循环像是 Pascal 的 repeat..until 循环循环就单纯只有一种,没有变化,它的语法如下 for 循环 for (expr1; expr2; expr3) { statement } 其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用 来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部 分程序,若程序只有一行,可以省略大括号 {}。下例是用 for 循环写的 "以后不敢了" 的例子,可以拿来和用 while 循环的比较。从上例中,可以很明显的看到,用 for 和用 while 的不同。实际应用上,若循环有初 始值,且都要累加(或累减),则使用 for 循环比用 while 循环好。例如将资料从数据 库取出,可能用 for 循环会比用 while 循环适合?6
循环,通常处理复合式的条件判断,每个子条件,都是 case 指令部分。在实 switch 循环 作上若使用许多类似的 if 指令,可以将它综合成 switch 循环。 语法如下 switch (expr) { case expr1: statement1; break; case expr2: statement2; break; : : default: statementN; break; } 其中的 expr 条件,通常为变量名称。而 case 后的 exprN,通常表示变量值。冒号后 则为符合该条件要执行的部分。注意要用 break 跳离循环。
break; } ?> 很明显的,上述的例子用 if 循环就很麻烦了。当然在设计时,要将出现机率最大的条 件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天 出现的机率相同,所以不用注意条件的顺序.8
【PHP基本语法大全】相关文章:
2.关于PHP语法
6.PHP 基本简介