PHP/HTML基础语法
PHP:超文本预处理器,是一种通用开源脚本语言,可以跟html,css和JavaScript代码融合在一起。
本文是学习PHP做的笔记 ( ﹡ˆoˆ﹡ ) ,原文链接:PHP基础语法篇_php脚本语言对其-CSDN博客
PHP基本语法
1,php标记
PHP会寻找起始和结束标记,也就是<?php ?>
, 这告诉PHP开始和停止解析二者之间的代码。此种解析方式使得PHP可以被嵌入到各种不同的文档中,而任何起始和结束标记之外的部分都会被PHP解析器忽略。
访问的文档如果不是默认的index.php,则需要在访问时,加入路径进行访问
如果文件内容是纯PHP代码,最好在文件末尾删除PHP结束标记。这可以避免在PHP结束标记之后,万一意外加入空格或者换行符,会导致PHP开始输出这些空白,而脚本中此时并无输出意图
<?php echo "hello,php"; // ... more code echo "last statement"; // 脚本至此结束,并无PHP结束标记
2,指令分隔符
PHP需要在每个语句后用分号结束指令; ,一段PHP代码中的结束标记隐含表示了一个分号,在一个PHP代码段中的最后一行可以不用分号结束。
3,注释
-
单行:/ /
-
多行:/* */
4、变量
PHP中变量用一个$ 后加变量名来表示。变量名区分大小写。(变量、常量、php配置文件php.ini区分大小写,其他不分)
$var = 'Bob'; $Var = 'Joe'; $4site = 'not yet'; //非法变量名,以数字开头了 $_4site = 'not yet'; //合法变量名,以下划线开头 $this = 'Nikon'; //非法赋值,$this是一个特殊的变量,不能被赋值
5、赋值
传值赋值(默认)
使用“=”将赋值表达式的值赋给另一个变量(单独分配房间),互不干扰
$name = "tom"; $myname = $name;
引用赋值
将赋值表达式内存空间的引用赋给另外一个变量,简单地将一个&符号加到将要赋值的变量前(共享一个房间),改变其中一个变量的值会影响另一个变量。
$foo = 'Bob'; $bar = &$foo; //通过$bar引用给$foo
6,可变变量
变量的名字可以动态改变,用$$
符号表示。
$a = 'hello'; $$a = 'world'; //等价于$hello = 'world'
7,常量
常量是一个简单值的标识符(名字),在脚本执行期间该值不能改变。默认大小写敏感,一般来讲常量标识符总是大写的,用define()函数关键词再定义。
常量只能包含标量数据(boolean, integer, float, string),注意没有$
符号。
define('NAME', 'Tom'); echo NAME;
不能在函数中,循环内以及if语句中使用const来定义常量
8,魔术常量(预定义常量)
9,变量作用域
变量法则
1超全局变量,任何地方都可以访问
2常数,一般是全局性,函数内外都可以访问
3全局变量(一般声明在函数外面),函数内不可以访问,函数内可以通过global关键.就可以访问全局变量(其实是同一个变量)
4在函数中创建的静态变量,函数外无法访问,但是这个变量的值一直保留
5在函数中创建的局部变量,函数外是无法访问的,并且在函数执行结束后失效
6变量销毁 php一般有自动垃圾回收机制,但是也可以通过收到销毁,用函数unset()。
10,数据类型
(1)整型
(2)浮点型 NAN属于浮点数
(3)字符串型 • 一般情况是单引号和双引号
双引号字符串中可以解析变量; 如果变量使用大括号{}, 注意变量和左括号之间不可以有空格,否则会把大括号也打印出来。
(4)布尔型 不区分大小写
(5)NULL 表示一个变量没有值。以下三种情况,变量可能为NULL: • 被赋值为NULL • 尚未被赋值 • 被unset()
(6)数组型 php中的数组实际上是一个有序映射,映射是一种把values关联到keys的类型。
key的强制转换:
字符串: 如果包含合法整型值,会被转换为整型。如"8" 实际被储存为8,但是"08" 则不会强制转换,因为其不是一个合法的十进制数值。 浮点数: 会被转换成整型,且转换时直接舍弃小数部分。如8.7 实际被存储为8。 布尔值: 会被转换成整型,true为1,false为0。 Null: 会被转换为空字符串,即""。 NaN: 会被转换为空字符串。 数组和对象: 不能被用作key,会出现警告:Illegal offset type
重复的key会进行覆盖:
如果在数组定义中,多个单元都使用了同一个key,则最后一个出现的单元会将前面的覆盖。
key为可选项: 如果未指定key,php将自动使用之前用过的最大integer键名加上1作为新的键名
数组的访问: $array[key] (大括号{} 的访问方法已经不再支持了)
数组元素的修改与新增: 数组单元可以通过array[key] 来进行修改或新增;如果想要删除某键值对,对其调用unset() 函数
对象型 对象是复合型的数据类型,php中任何对象可以拥有特征(属性)和行为(方法)
class Stu { public $university = "PeKing"; public $major; public function __construct($m) { $this->major = $m; } public function wugong() { echo "wugong"; } } $zhang = new Stu("CS"); var_dump($zhang); echo $zhang->major; //CS
11、类型转换
(1)(type) 强制转换
(int)、(integer) :转换为整型 (float)、(double)、(real) :浮点型 (string) :字符型 (bool)、(boolean) :布尔型 (array) :数组型 (object) :对象
(2)intval()、floatval()、strval()
(3)setype()函数
前两种转换方式都不会改变原数据的类型,即$a 还是string类型。但第三种方式会改变原数据类型,也就是直接将$a 的类型转变为float类型
(4)Integer整型(类型转换)
如果给定的数超出integer范围,将会被解释为float类型
将resource转换成integer时,结果会是PHP运行时,给resource分配的唯一资源号
NAN将转换为0
字符串转换为数值
如果该字符串没有包含'.','e'或'E' 并且其数字值在整型的范围之内,该字符串将被当成integer来取值,其他所有情况下为PHP_INT_MAX
该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0
$a = "1249857576676879778766767793"; var_dump((int)$a); //int(9223372036854775807) 即PHP_INT_MAX $b = "123aljfeioj"; var_dump((int)$b); //int(123) $c = "5.8"; var_dump((int)$c); //int(5) 向下取整 $d = "jflj320jljk"; var_dump((int)$d); //int(0) $e = 1.5e+10; var_dump((int)$e); //int(15000000000)
(5)Boolean布尔类型(类型转换)
当转换为布尔值时,以下值被认为是FALSE:
1布尔值FALSE本身 2整型值0 3浮点型值0.0 4空字符串(字符串里有空格不算空字符串),以及字符串"0" 5不包含任何元素的数组 6特殊类型NULL(包括尚未赋值的变量) 其他所有的值都被认为是TRUE(包括任何资源 和 NAN)
$a = NAN; var_dump((bool)$a); //bool(true) $b = " "; var_dump((bool)$b); //bool(true) $c = ""; var_dump((bool)$c); //bool(false)
(6)String字符串(类型转换)
转换规则:
1布尔值TRUE转换成"1" ,FALSE转换成"" (空字符串) 2整型和浮点型转换为数字的字面样式的string 3数组array总是转换成字符串"Array" 4NULL转换为空字符串 5资源resource转换为"Resource id #1" 这种结构的字符串
(7)Array数组(类型转换)
对于任意integer,float,string,boolean和resource类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为0,该元素即为此标量的值。
如果一个对象object类型转换为array,则结果为一个数组,其单元为该对象的属性,键名将为成员变量名
注意这里,对象内的属性类型不同,转换为数组时,键名也会有所不同。public、private以及protected有所区别
(8)Object对象(类型转换)
array转换成object将键名成为属性并具有相对应的值。
注意,当键名为数字时,一定要使用大括号包裹键名。对于其他值,会包含进成员变量名scalar。(scalar是标量的意思)
12、运算符
(1)赋值运算符= (2)算术运算符
+-*/ % ++ -- **(指数)
intdiv()整除
(3)字符串运算符 连接运算符.:
返回其左右参数连接后的字符串。 (4)逻辑运算符 与&&(AND)、或||(OR)、非!、异或xor
优先级从高到低:&&、||、=、AND、OR
一般情况下,AND和&& 等价,但是要注意它们的优先级是不同的,and的优先级比较低,低于赋值运算符,所以$b 通过赋值运算符,直接等于了true。
平时使用时,建议使用&&来替代AND ,否则优先级容易出问题。
短路运算:
$a = false && foo(); var_dump($a); //bool(false) $b = false and foo(); var_dump($b); //bool(false) $c = true || foo();
(5)比较运算符 == === 等于和全等运算符:和JavaScript相同。<>和!=不等。
!==不全等。
<=>太空船运算符(组合比较符):当$a小于、等于、大于$b时,分别返回一个小于、等于、大于0的integer值。php7开始提供。
NULL合并操作符:从左往右第一个存在且不为NULL的操作数。如果都没有定义,则返回NULL。php7开始提供。 (6)位运算 位运算符允许对整型数中指定的位进行求值和操作。 & 按位与 ^ 异或 ~ 非 << >> 移位
(7)错误处理
$php_errormsg = "error"; $my_file = @file('non_existent_file') or die("Failed opening file: error wa '$php_errormsg'"); //Failed opening file: error wa 'error'
(8)数组运算符 合并运算符+:
相等运算符== ===:
双等运算符主要看键值对是否一致,不管顺序。三等运算符需要考虑键值对的顺序。
(9)执行运算符 php支持一个执行运算符:反引号(``)。php将尝试将反引号中的内容作为shell命令来执行,并将其输出信息返回。
13、流程控制 (1)if/else
php还提供了一些替代语法:
使用:替代{ ;使用endif 替代} 。
i (2)while/do-while 同样有替代语法,: 和endwhile。
(3)for endfor
(4)foreach foreach语法结构提供了遍历数组的简单方式,foreach仅能用于数组和对象 endforeach
(5)break 和 continue break结束当前for、foreach、while、do-while或者switch结构的执行,后面可以跟一个参数,表示跳出几层循环,默认为1层。
continue在循环中用来跳过本次循环中剩余代码的执行,用法跟break差不多,也可以跟参数