PHP之基础回顾

工作几年对于PHP的一些基础知识的回顾,做为多年来学习和使用PHP的总结。

    PHP做为一门宏定义语言,主要用来处理网页表单,可以内嵌在HTML文本文件中。为了区分HTML代码,PHP的代码块的起始界定使用 “ <?php ” 和 “ ?> ” 或者 PHP5.4版本以后的短标签“ <? ”和 “ ?> ”。对于纯PHP文件,同样使用以上的标签进行起始表示,但建议省略结束的 “ ?> ”标签。

PHP-变量/常量

变量:
PHP中的变量定义以美元符号 “ $ ”开头,例如:$name = “zhangsan”;变量名不支持生命变量类型,大小写敏感。合法的变量名以字母、下划线开头,但不能以数字、点、加减乘除等特殊符号开头,但是可以以中文中文汉字开头。
变量声明的合法性验证:

	```
		1、$name = "zhangsan";   // 合法
		2、$.name = "zhangsan";    // 不合法,不能以点开头
		3、$1234  = "zhangsan";     // 不合法,不能以数字开头
		4、$my-name = "zhangsan"; // 不合法,变量名不能有减号
		5、$myName = "zhangsan"; // 合法
		6、$名字 = "zhangsan";  // 合法
	```

常量:
常量的定义方式有两种:define和const。常量名中的字母必须全部大写,可以用下划线连接。
常量声明的合法性验证:

	```
	   1、define('NAME','zhangsan'); // 合法
	   2、define('NAME_first','zhangsan');// 不合法,字母必须全部大写 
	   3、define('NAME_FIRST','zhangsan'); // 合法
	   4、define('NAME_2','zhangsan'); // 合法
	   5、define('NAME_中国',‘张三’); // 合法
	   6、define('COLOR',[0 => '红', 1=> '蓝', 2 => '绿', 3 => '黑']); // define定义常量数组,需要PHP7.0+
	   7、echo NAME; // 无需使用 “ $ ” 或者引号
	   8、const NAME = 'zhangsan'; // 合法,但是前提define已经定义了NAME,运行时会报错
	   9、const NAME_Add = 'zhangsan'; // 非法,定义的常量名必须全大写
	   10、const COLOR = [0 => '红', 1=> '蓝', 2 => '绿', 3 => '黑']; // const定义常量数组,需要PHP5、6+
	```

常量定义后,不能更改或者取消。define可以判断一个常量是否定义,constant函数可以取出常量的值(效果通直接取值)。define和const的主要区别是define可以用在判断语句中,但是const不行。如果你需要灵活的方式定义常量,使用define,否则建议使用const定义常量。

PHP-函数
函数的定义以“ function ”关键字开头,后接函数名和参数,以大括号包含的函数体结束。
代码的定义形式为:
```

	   function demo($name,$age,...){
	      //函数...
	    }		
	    
	```

函数名的要求同变量名,不能以数字开头,不能包含点、加减乘除等特殊符号和字符,但是可以使用中文命名,不同于变量,函数名不区分大小写。
函数的参数可以没有,也可以有多个。支持默认参数,但是默认参数后不可出现必须传值的参数。对于基本类型,参数默认按值传递,对象和资源默认引用传参。
函数体可以为空,也可以有多个语句。可以使用return进行返回,也可以不返回。如果函数没有返回值,则默认为NULL。
函数各种形式的实例:


	1、function printName($name = 'World')
	{
	    echo "Hello, $name!";
	}
	
	2、function printName2(array $names) // array参数约束,需要PHP5.1+
	{
	    print_r($names);
	}
	
	3、function printName3(array $names, callable $filter) // callable参数约束,需要PHP5.4+
	{
	    print_r(array_map($filter, $names));
	}
	
	4、function sum(...$args)    // 可变参数数组,需要PHP5.6+
	{
	    return array_sum($args);
	}
	
	5、function printName4(string $name = 'World') // int, float, bool参数类型提示,需要PHP7+
	{
	    echo "Hello, $name!";
	}
	
	6、function getGreeting(string $name = 'World') : string  // 返回类型声明,需要PHP7+
	{
	    return "Hello, $name!";
	}
	
	7、function getGreeting2(string $name = null) : ?string // 可空返回类型声明,需要PHP7.1+
	{
	    return !$name ? null : "Hello, $name!";
	}

注意:如果限定参数和返回值是bool类型,应该使用bool而不是boolean,否则运行会出错。 PHP目前不支持重载。一种变相的重载实现方式是:以 …args定义函数参数,函数体根据参数的个数实现不同功能。

PHP-操作符
PHP支持常规算数运算符、赋值运算符、位运算符等。
各类运算符实例:

1、$a = 2; $b = 3;
echo $a (+ | - | * | / |% |**) $b; // 加减乘除、取模、指数
2、$c = $a + $b; // 赋值
3、$d = $a (&,|,^,<<,>>) $b; // 并、或、异或、左移、右移位运算
4、$e = ~$a; // 取反
5、echo $a (==|===|!=|<>|<|>|<=|>=|<=>) $b;   // 比较运算符:相等、全等、不等、不等、小于、大于、小于等于、大于等于、太空符(需要PHP7+)
$str1 = 'Hello'; $str2 = 'World';
6、echo $str1 . ',' . $str2 . '!';   // . 作为字符串连接符
7、if ($a (|| , && , xor , and, or) !$b) {}   // 逻辑运算符:或、并、异或、并、或、非
$arr1 = [1, 2]; $arr2 = [3, 4];
8、print_r($arr1 + $arr2);   // 数组合并
9、var_dump($arr1 !=|!==|<>|==|=== $arr2);   // 数组比较
10、var_dump($arr1 instanceof int);   // instanceof操作符
11、@coun($arr1);          //错误控制符@。当@加在函数调用前,函数抛出的错误将被忽略
12、var_dump(`ls -al`);   // ``, 非单引号, shell执行符号

PHP-流程控制
PHP支持常见的分支判断、循环等流程控制。
几种流程控制示例:

1、分支判断
$array = range(0,10);
$len = count($array);
(1)单分支判断
	if($len < 10){
		echo '<10';
	}
(2)多分支判断1
	if($len <10){
		echo '<10';
	}else{
		echo '10 <= length <=20';
	}
(3) 多分支判断2
	if($len > 20){
		echo '>=20';
	}elseif($len < 10){
		echo ’<10‘;
	}else{
		echo '10 <= length <=20';
	}

2、循环流程控制
(1) for循环
	for($i=0;$i<=20;i++){
	   // 循环体...
	}
(2)foreach() 循环
	$array = array(1,2,3,4,5,6,7,...);
	foreach($array as $key => $val){
		// 循环体...
	}
(3)while循环
$index = 0;
while($index <= $len){
	if($index%2 == 0 ){
		continue;
	}
	echo $array[$index];
	++ $index;
	if($index == 9){
		break;
    }
}
(4)do-while循环 // 无论条件是否成立,程序都进行循环一次
	do{
		echo $array[$index];
		++$index;
	}while($index < $len);
(5)switch循环
	switch($len){
		case:1:
			....
			break;
		case 2:
			....
			break;
			...
		default:
			break;
	}

PHP的数据类型
PHP只是9种原始数据类型:
四种标量类型
boolean 布尔类型
integer 整数类型
float 浮点数类型(也可称为 double)
string 字符串类型

三种复合类型
array 数组
object 对象
callable 可调用类型

两种特殊类型
NULL 空(无类型)
resource 资源

1、数组类型Array:
PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
数组语法定义:
可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。PHP5.4版本后,可以使用[]代替array()进行定义。
数组定义实例:

   		 (1)、$array = array(1,2,3,4,5,...);
   		 (2)、$array = [1,2,3,4,5,6]; #PHP5.4+支持

2、字符串类型String:
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。
字符串语法定义:
有4中语法定义模式,单引号、双引号、heredoc 语法结构、nowdoc 语法结构(自 PHP 5.3.0 +支持)
单引号模式:要在字符串中表达一个单引号“ ’ ”,需要使用反斜杠“ \ ”进行转义,要表达一个反斜线自身,则用两个反斜线“ \ ”,其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 “ \r ” 或者 “ \n ”,并不代表任何特殊含义,就单纯是这两个字符本身。单引号模式,字符串中的变量和特殊字符的转义序列将不会被替换
单引号定义实例:

		```
			echo  'string'; // 输出 string;
			echo  'I \'m Tom'; // 输出  I'm Tom;
			echo  'My name is $name'; // 输出 My name is $name *单引号字符串不会将变量进行转义*
		```

双引号模式:字符串的内容被 “” 进行包含,PHP会对一些字符进行转义,和单引号字符串一样,转义任何其它字符都会导致反斜线被显示出来
双引号定义实例:

	```
	\n	换行(ASCII 字符集中的 LF 或 0x0A (10))
	\r	回车(ASCII 字符集中的 CR 或 0x0D (13))
	\t	水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
	\v	垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
	\e	Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
	\f	换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
	\\	反斜线
	\$	美元标记
	\"	双引号
	\[0-7]{1,3}	符合该正则表达式序列的是一个以八进制方式来表达的字符
	\x[0-9A-Fa-f]{1,2}	符合该正则表达式序列的是一个以十六进制方式来表达的字符
	```

PHP变量解析:当字符串。用双引号或 heredoc 结构定义时,其中的变量将会被解析
这里共有两种语法规则:一种简单规则,一种复杂规则。简单的语法规则是最常用和最方便的,它可以用最少的代码在一个 string 中嵌入一个变量,一个 array 的值,或一个 object 的属性

1、简单语法:当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线。

2、任何具有 string 表达的标量变量,数组单元或对象属性都可使用此语法。只需简单地像在 string 以外的地方那样写出表达式,然后用花括号 { 和 } 把它括起来即可。由于 { 无法被转义,只有 $ 紧挨着 { 时才会被识别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值