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差不多,也可以跟参数