PHP基本语法
PHP基本语法
PHP 标识符
- PHP 脚本以
<?php
开头,以?>
结尾:<?php code ?>
。 - PHP 脚本可放置于文档中的任何位置。
- PHP 文件的默认文件扩展名是 “.php”。
- PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。
- PHP 语句以分号结尾(;),功能语句必须以(;)结尾。
- PHP 代码块的关闭标签也会自动标明分号(因此在 PHP 代码块的最后一行不必使用分号)。
- PHP注释:
- 单行注释:// # 。
- 多行注释:
/* ...*/
多行注释不能嵌套多行注释。
<?php
echo "Hello world" ;
// ... more code
echo "Last statement" ;
// 脚本至此结束,并无 PHP 结束标记
PHP与HTML混编
凡是在一对开始和结束标记之外的内容都会被 PHP 解析器忽略,这使得 PHP 文件可以具备混合内容。 可以使 PHP 嵌入到 HTML 文档中去。
<p>This is going to be ignored by PHP and displayed by the browser.</p>
<?php echo 'While this is going to be parsed.' ; ?>
<p>This will also be ignored by PHP and displayed by the browser.</p>
当 PHP 解释器碰到 ?> 结束标记时就简单地将其后内容原样输出(除非马上紧接换行 - 见指令分隔符)直到碰到下一个开始标记;
<?php if ( $expression == true ): ?>
This will show if the expression is true.
<?php else: ?>
Otherwise this will show.
<?php endif; ?>
PHP变量
-
变量:
- php中存储数据的一种方式,就是可以发生改变的量(数据-- 8种数据)。
- 在内存中开辟一个可以存放数据的空间,给这个空间取一个名字,当前空间就是变量。
- 当前空间的名字就是变量名,当前空间中的数据(8种数据)就是变量值。
- 这个值在php运行时可以发生改变,这个时候统称为“变量”。
-
定义变量并赋值
- 定义变量: $变量名,即用一个美元符号后面跟变量名来表示。
- 定义变量并赋值:$变量名 = 值。
- 在PHP中,不能出现只定义不赋值的情况。
-
变量名命名规则
- 一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。
- 按照正常的正则表达式,它将被表述为:
'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
。 - php变量名不推荐使用中文。
- PHP变量名严格区分大小写。
- php变量名要有意义,尽量做到“见名知意”。
- $this 是一个特殊的变量,它不能被赋值。
-
可变变量
- 可以变化的量
- 可变变量只是变量的一种,可以在开头连续使用多个$符号。
- 理论上$符号可以无限使用,实际上一般只使用2个。
- 综合方式,是从右向左依次结合一个$,解析成字符串后,再结合下一个$,依次类推,直到最后一个。
-
变量的引用赋值(标量类型):
- 普通变量赋值:变量2 = 变量1
- 引用变量赋值:变量2 = &变量1(变量2相当于变量1值的别名,执行同一个数据)
-
变量命名方式
- 驼峰式命名法:第一个单词的首字母小写,其他大写 getUserName。
- 匈牙利命名法:每个单词下划线隔开:get_user_name。
- 帕斯卡命名法: 每个单词首字母大写:GetUserName。
变量常用的几个函数
- echo 输出或者打印变量的值。
- var_dump 打印变量的相关信息–类型、长度、值。
- isset 检测变量是否存在。
- unset 删除变量值。
- empty — 检查一个变量是否为空
- 以下的东西被认为是空的:
- “”(空字符串)
- 0 (作为整数的0)
- 0.0 (作为浮点数的0)
- “0” (作为字符串的0)
- NULL
- FALSE
- array() (一个空数组)
- $var; (一个声明了,但是没有值的变量)
- resource 资源都不为空
- 以下的东西被认为是空的:
PHP数据类型
PHP 支持 8 种原始数据类型。
- 四种标量类型:boolean (布尔型)、integer (整型)、float (浮点型 ) 、string (字符串)
- 两种复合类型:array (数组)、object (对象)
- 两种特殊类型:resource (资源)、NULL (无类型)
Integer 整型
- 简单地说,就是正整数,负整数,0。
- 要使用八进制表达,数字前必须加上 0(零)。
- 要使用十六进制表达,数字前必须加上 0x。
- 要使用二进制表达,数字前必须加上 0b。
<?php
$a = 1234 ; // 十进制数
$a = - 123 ; // 负数
$a = 0123 ; // 八进制数 (等于十进制 83)
$a = 0x1A ; // 十六进制数 (等于十进制 26)
# 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
var_dump ( 01090 ); // 八进制 010 = 十进制 8
?>
- 整数溢出:如果给定的一个数超出了 integer 的范围,将会被解释为 float 。同样如果执行的运算结果超出了 integer 范围,也会返回 float 。
- PHP 中没有整除的运算符。1/2 产生出 float 0.5。值可以舍弃小数部分强制转换为 integer ,或者使用 round() 函数可以更好地进行四舍五入。
转换为整型
- 要明确地将一个值转换为 integer ,用 (int) 或 (integer) 强制转换。
- 因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换
- 通过函数 intval() 来将一个值转换成整型
- 从布尔值转换: FLSE 将产生出 0(零), TRUE 将产生出 1(壹)。
- 从浮点型转换 :当从浮点数转换成整数时,将向下取整。
- 字符串转换为数值:
- 如果该字符串没有包含 ‘.’,‘e’ 或 ‘E’ 并且其数字值在整型的范围之内,将被当成 integer 来取值。否则被作为 float 来取值。
- 如果字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。
- 合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 ‘e’ 或 ‘E’ 后面跟着一个或多个数字构成。
Float 浮点型
- 浮点型(也叫浮点数 float,双精度数 double 或实数 real),数学中的小数和分数等。
- NaN:某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE 。
- 由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用is_nan() 来检查。
String 字符串
- 一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。
- 任何类型的数据加上引号(单引号,双引号)就是字符串。
一个字符串可以用 4 种方式表达:
- 单引号声明:定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ')。
1. 要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。
2. 要表达一个反斜线自身,则用两个反斜线(\)。 - 双引号声明:(如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析)
- 定界符声明:
- 使用定界符需要注意开头和结尾的书写格式。
- 以<<<开始,后面跟一串自定义的字符串。
- 书写完自定义的字符串时,必须换行些内容。
- 书写完内容后,必须另起一行写结束符号。
- 结束时所引用的标识符必须在该行的第一列,且后面不能有其他任何内容。
- 自定义字符串一般使用EOF(end of file)。
- 标识符的命名只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。
- 定界符语法结构
- heredoc 结构是类似于双引号字符串的。
- Nowdoc 结构是类似于单引号字符串的。
// Heredoc
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
// Nowdoc
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
单双引号区别:
- 在单引号或 Nowdoc 字符串中的变量和特殊字符的转义序列将不会被替换。
- 当字符用双引号或 Heredoc 结构定义时,其中的变量将会被解析。
如何选择声明方式:
- 尽量用单引号,功能少效率高。
- SQL语句一般使用双引号。
- 大文本或者数据使用定界符的声明方式。
Boolean 布尔类型
- 要指定一个布尔值,使用关键字 true或 false。
- 两个布尔值都不区分大小写。 (通常运算符所返回的 boolean 值结果会被传递给控制流程。 )
<?php
// == 是一个操作符,它检测两个变量是否相等,并返回一个布尔值
if ( $action == "show_version" ) {
echo "The version is 1.23" ;
};
// 这样做是不必要的...
if ( $show_separators == TRUE ) {
echo "<hr>\n" ;
};
// ...因为可以使用下面这种简单的方式:
if ( $show_separators ) {
echo "<hr>\n" ;
};
?>
转换为布尔值
- 将一个值转换成 boolean ,用 (bool) 或者 (boolean) 来强制转换。
- 当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。
当转换为 boolean 时,以下值被认为是 FALSE :
- 布尔值 FALSE 本身
- 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 “0”
- 不包括任何元素的数组
- 不包括任何成员变量的对象(仅 PHP 4.0 适用)
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
- 所有其它值都被认为是 TRUE (包括任何资源)。
<?php
var_dump ((bool) "" ); // bool(false)
var_dump ((bool) 1 ); // bool(true)
var_dump ((bool) - 2 ); // bool(true)
var_dump ((bool) "foo" ); // bool(true)
var_dump ((bool) 2.3e5 ); // bool(true)
var_dump ((bool) array( 12 )); // bool(true)
var_dump ((bool) array()); // bool(false)
var_dump ((bool) "false" ); // bool(true)
# -1 和其它非零值(不论正负)一样,被认为是 TRUE !
?>
NULL类型
- 特殊的 NULL 值表示一个变量没有值。 NULL 类型唯一可能的值就是 NULL 。
- NULL 类型只有一个值,就是不区分大小写的常量 NULL 。
- 在下列情况下一个变量被认为是 NULL :
- 被赋值为 NULL 。
- 尚未被赋值。
- 被 unset() 。
- 检测变量是否为 NULL : is_null()
- NULL就是为了占用变量名
转换到 NULL
使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。
Resource 资源类型
- 资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
- 资源说的不是一种具体的值,而是一个概念的多种数据的统称。
- 就是打开php程序之外的任何东西。
- 多种数据:上传文件,加载图片,路径,数据库等这些都称为“外部资源”,不是拍黄片本身就可以定义的数据。
* 数组和对象会单独讲解,此处不再讲解。
获取数据类型
- var_dump():
- 优点:即可以查看变量类型,也可以查看值。
- 缺点:类型和值的结果无法被接收,后续代码无法使用。
- gettype():获取数据类型
- 返回的字符串的可能值为:
- “ boolean ”
- “ integer ”
- “ double ”(由于历史原因,如果是 float 则返回“double”,而不是“float”)
- “ string ”
- “ array ”
- “ object ”
- “ resource ”
- “ NULL ”
- 优点:可以获取任何数据类型,获取之后可以给下方程序使用。
- 缺点:功能强大导致效率低下,需要逐个匹配类型。
- 返回的字符串的可能值为:
- is_*类型 系列变量类型
- is_int() [别名 is_integer() ] 检测变量是否是整数 。
- is_float() [别名 is_double] 检测变量是否是浮点型 。
- is_string() 检测变量是否是字符串 。
- is_array() 检测变量是否是数组 。
- is_bool() 检测变量是否是布尔型 。
- is_object() 检测变量是否是一个对象 。
- is_numeric() 检测变量是否为数字或数字字符串 。
- is_null() 检测变量是否为 NULL。
- is_scalar() 检测变量是否是一个标量。
- is_resource() 检测变量是否为资源类型 。
- 优点:检测效率高,并且可以接收检测的结果。
- 缺点:功能单一