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新增运算符:
intdiv(x,y)
–> x 除以y的商的整数部分,如intdiv(10,3)的值为3
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
- 变量作用域
全局变量、局部变量
- php中有4种不同的变量作用域:
local、global、static、parameter
- 一般来说,函数内部的是
局部变量
,且函数内部不能访问
外部的全局变量;同理,外部也不能访问函数内部的局部变量。若是要在函数内部访问,则要使用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();
?>
- 当一个函数完成后,它的所有变量通常都会被删除,如果想要让函数执行完毕后函数内的局部变量保留,可以使用
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
?>
参数作用域
传递给函数的参数:
<?php
function my($area){
if($area>250)
echo "我家房子的面积是多少?".$area."m^2";
else
echo "输入有误!";
}
my(273);
?>
可变变量
允许动态地改变一个变量的名称:
原理分析:$$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
?>
注意:
- 常量前面没有
$
符号 - 常量只能使用
define
和const
定义 - 常量的
作用域是全局的
,即在任何地方都能使用
定义好的常量 - 常量不能被修改
- 常量的值是标量(不是矢量)
- 预定义常量
(魔术常量)
PHP中有许多预定义
常量,也称为魔术常量
,其中很多是由不同的扩展库定义的,只有在加载了这些库时才会出现
魔术常量(常见) | 描述 |
---|---|
_LINE_ |
文件中的当前行号 |
_FILE_ |
文件的完整路径和文件名 |
_DIR_ |
文件所在的目录 |
_FUNCTION_ |
函数名称 |
_CLASS_ |
类的名称 |
_TRAIT_ |
trait的名字 |
_METHOD_ |
类的方法名 |
_NAMESPACE_ |
当前命名空间的名称 |
5.流程控制
- 条件控制
if、 switch
- 循环控制
while、 do...while、 for
- 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是对数组的复制操作!!!
- 跳转语句
break、continue
- 包含语句
include
include "a.php";
include_once
确保在执行期间,被包含的文件只生效一次,防止重复定义
include_once 'a.php';
require、require_once
的作用相当于include、include_once
6.函数
- 基本形式
<?PHP
function add($sum1,$sum2){
return $sum1+$sum2;
}
echo add(7,3); //10
?>
- 参数
- 按值传递:
传入函数的是参数的备份,即参数不会被改变!
<?PHP
function add($sum){
$sum +=2;
echo $sum;
}
$a=3;
add($a); //5
echo $a; //3
?>
- 通过引用传递:
参数的值会随着函数而改变:
<?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
?>