二、PHP基础

1.数据类型

String,Integer,Float,Boolean,Array(数组)Object(对象),NULL(空值)

2.PHP语法

  • 第一个实例
<?php
	$str="Hello world!";	//声明一个字符串变量$str
	echo $str;	//输出变量$str
?>
//Hello world!
  • PHP7中,含有十六进制字符的字符串不再被视为数字,而是普通的字符串
  • 运算符
+ - * / % ++ -- == === != > <  && ||   (a>b)?c:d   += -= << >> 
  • 字符串连接符: .(英文字符"点")
  • PHP7新增运算符:
  1. intdiv(x,y)–> x 除以y的商的整数部分,如intdiv(10,3)的值为3
  2. x<=>y --> 如果x和y值相等(不是恒等于),返回0;x>y,返回1;x<y,返回-1

3.变量

  • 声明变量
/*
1.php中变量以$开头,后面跟着变量名
2.php是弱类型语言,无须声明变量类型
 */
$a="Yeah!"; //声明了一个字符串变量a
$b=123;	//声明了数值变量b
$c="123";
var_dump($b==$c); //true
var_dump($b===$c); //false
  • 变量作用域
  1. 全局变量、局部变量
  2. php中有4种不同的变量作用域:local、global、static、parameter
  3. 一般来说,函数内部的是局部变量,且函数内部不能访问外部的全局变量;同理,外部也不能访问函数内部的局部变量。若是要在函数内部访问,则要使用global关键字声明:
<?php
	$x=10;	//全局变量
	function my(){
		$y=20;	//局部变量
		echo "x1=".$x;	//x1=
		echo "y1=".$y;	//y1=20
	}
	my();	//调用my()
	echo "x2=".$x;	//x2=10	
	echo "y2=".$y;	//y2=
?>
<?php
	$x=10;	
	function my(){
		echo "x=".$x; //x=
		global $x;	//获取全局变量$x
		echo "x=".$x; //x=10	
	}
	my();	
?>

分析:在php中,全局变量是存储在$GLOBALS[index]中,index表示变量名。上面的代码也可以这么写:

<?php
	$x=10;	
	function my(){				
		//global $x;
		echo "x=".$GLOBALS['x']; //x=10	
	}
	my();	
?>
  1. 当一个函数完成后,它的所有变量通常都会被删除,如果想要让函数执行完毕后函数内的局部变量保留,可以使用static关键字声明:
<?php	
	function my(){				
		$i=1;
		$i++;
		echo "i=".$i;
		echo "<br>";
	}
	my(); //i=2
	my(); //i=2	
?>
<?php	
	function my(){				
		static $i=1; //static
		$i++;
		echo "i=".$i;
		echo "<br>";
	}
	my(); //i=2
	my(); //i=3	
?>
  1. 参数作用域传递给函数的参数:
<?php	
	function my($area){
		if($area>250)				
			echo "我家房子的面积是多少?".$area."m^2";
		else
			echo "输入有误!";
	}
	my(273);	
?>
  1. 可变变量允许动态地改变一个变量的名称:
    原理分析: $$a ==> $aa ==> bb
<?php	
	function my(){				
		$a="aa";
		$aa="bb";
		echo $$a; //bb		
	}
	my();	
?>

可变变量支持多级动态改变:

<?php	
	function my(){				
		$a="aa";
		$aa="bb";
		$bb="ccc";
		$ccc="dddd";
		$dddd="emmmm";
		echo $$$$$a; //emmmm		
	}
	my();	
?>

4.常量

  • 常量的声明(全局作用域)
    使用define(name,value)定义,也可以使用const类定义之外定义常量
<?PHP
	define("name", "张三");
	const age="25";
	echo name; //张三
	echo age; //25
?>

注意:

  1. 常量前面没有$符号
  2. 常量只能使用defineconst定义
  3. 常量的作用域是全局的,即在任何地方都能使用定义好的常量
  4. 常量不能被修改
  5. 常量的值是标量(不是矢量)
  • 预定义常量(魔术常量)
    PHP中有许多预定义常量,也称为魔术常量,其中很多是由不同的扩展库定义的,只有在加载了这些库时才会出现
魔术常量(常见) 描述
_LINE_ 文件中的当前行号
_FILE_ 文件的完整路径和文件名
_DIR_ 文件所在的目录
_FUNCTION_ 函数名称
_CLASS_ 类的名称
_TRAIT_ trait的名字
_METHOD_ 类的方法名
_NAMESPACE_ 当前命名空间的名称

5.流程控制

  • 条件控制
ifswitch
  • 循环控制
whiledo...whilefor
  • foreach
<?PHP
	$arr = [1,2,3];
	foreach($arr as $val){ //遍历数组
		echo $val; // 1 2 3
		echo "<br>";
	}
	foreach ($arr as $key => $value) { //遍历数组的键和值
		echo $key."=>".$value; //0=>1 1=>2 2=>3
		echo "<br>";
	}
?>

在PHP7中,按照值进行循环时,foreach是对数组的复制操作!!!

  • 跳转语句
breakcontinue
  • 包含语句
  1. include
include "a.php";
  1. include_once确保在执行期间,被包含的文件只生效一次,防止重复定义
include_once 'a.php';
  1. require、require_once的作用相当于include、include_once

6.函数

  • 基本形式
<?PHP
	function add($sum1,$sum2){
		return $sum1+$sum2;
	}
	echo add(7,3); //10
?>
  • 参数
  1. 按值传递:
    传入函数的是参数的备份,即参数不会被改变!
<?PHP
	function add($sum){
		$sum +=2;
		echo $sum;
	}
	$a=3;
	add($a); //5
	echo $a; //3
?>
  1. 通过引用传递:
    参数的值会随着函数而改变:
<?PHP
	function add(&$sum){
		$sum +=2;
		echo $sum;
	}
	$a=3;
	add($a); //5
	echo $a; //5
?>

注意:引用传递的参数必须是一个变量!!! 如下代码则会报错:

<?PHP
	function add(&$sum){
		$sum +=2;
		echo $sum;
	}
	//$a=3;
	//add($a); //正确写法
	add(3); //引用传递的参数必须是一个变量
?>
  • 默认参数
function add($arr=array('zhangsan','lisi'),$str='girl'){}
  • 指定参数类型
function add(int $a,string $b){}
  • 可变参数数量
    在PHP5.6以后,参数可包含...来表示函数可接受一个可变数量的参数,可变参数将会被当作一个数组传递给函数
<?PHP
	function add(...$num){
		$sum=0;
		foreach ($num as $key => $value) {
			$sum+=$value;
		}
		echo $sum;
		//return $sum;
	}
	add(1,2,3); //6
	add(1,2,3,4,5); //15	
?>
  • 闭包函数(匿名函数)
<?PHP
	$m=function($name){
		echo "Hello $name";
	};	//特别注意,这里要加上";"
	$m("PHP");
?>
  • 闭包函数从父作用域继承变量,需要使用关键字use
<?PHP
	$message='hello';	
	//没有use
	$example=function(){
		var_dump($message);
	};
	echo $example(); //null

	//继承$message
	$example=function() use($message){
		var_dump($message);
	};
	echo $example(); //hello

	//当函数被定义的时候就继承了作用域中变量的值,而不是在调用时才继承
	//此时改变$message的值对继承没有影响
	$message='world';
	echo $example(); //hello

	//重置$message的值为"hello"
	$message='hello';

	//继承引用
	$example=function() use(&$message){
		var_dump($message);
	};
	echo $example(); //hello

	//父作用域中$message的值被改变,当函数被调用时$message的值发生改变
	//当前是继承引用,注意与非继承引用的区别:
	$message='world';
	echo $example(); //world

	//闭包也可以接收参数
	$example=function($arg) use($message){
		var_dump($arg.' '.$message);
	};
	$example("hello"); //hello world
?>

猜你喜欢

转载自blog.csdn.net/A15815635741/article/details/83151556