目录
前提
PHP运行环境,只是单纯的学习可以考虑安装PHP集成环境软件,比如PhpStudy,Xampp等软件,可以一步到位。
基本语法
<?php //PHP标记
echo 'Hello,World!'; //输出"Hello,World!"
?>
数据类型
PHP变量中的数据类型不是由程序员设定的,而是由该变量使用的上下文运行时决定的。
echo:输出一个或多个字符串(只能打印标量类型)
var_dump():打印变量的值和类型
print_r():易于理解的格式打印变量,相较于echo,可以打印更多数据类型
1. 四种标量类型
Boolean 布尔类型
<?php
$a_bool = TRUE;
$b_bool = FALSE;
echo $a_bool; //输出1
echo $b_bool; //输出空
var_dump($a_bool); //输出bool(true)
var_dump($b_bool); //输出bool(false)
print_r($a_bool); //输出1
print_r($b_bool); //输出空
Integer 整型
<?php
$a_int = 333;
echo $a_int; //输出333
var_dump($a_int); //输出int(333)
print_r($a_int); //输出333
Float 浮点型
<?php
$a_float = 333.28;
echo $a_float; //输出333.28
var_dump($a_float); //输出float(333.28)
print_r($a_float); //输出333.28
String 字符串
<?php
$a_string = 'Hello';
echo $a_string; //输出Hello
var_dump($a_string); //输出string(5)"Hello"
print_r($a_string); //输出Hello
2. 三种复合类型
Array 数组
<?php
$a_array = array(1,333,333.28,'Hello');
echo $a_array; //输出报错
var_dump($a_array); //输出array(4) { [0]=> int(1) [1]=> int(333) [2]=> float(333.28) [3]=> string(5) "Hello" }
print_r($a_array); //输出Array ( [0] => 1 [1] => 333 [2] => 333.28 [3] => Hello )
Object 对象
<?php
class foo{
}
$bar = new foo;
var_dump($bar);//输出object(foo)#1 (0) { }
print_r($bar);//输出foo Object ( )
Callback / Callable 可调用
暂时空
3. 两种特殊类型
NULL 无类型
NULL与0的区别,NULL代表空,不占空间。0代表数值为0,占内存空间
<?php
$a_null = NULL;
echo $a_null; //不输出
var_dump($a_null); //输出NULL
print_r($a_null); //不输出
Resource 资源
暂时空
变量
1. 变量名的命名规则
以字母,数字,下划线构成,首字符不可以是数字。现在支持的更广泛,甚至汉字也可以当变量名,但是强烈不建议这样做。
2. 变量名,变量值和存储地址的关系
定义一个变量,内存首先会开辟一块空间,将变量值存入,存储空间的地址由变量名所指向。
"$a = 3"
3. 可变变量
一个变量的变量名可以动态的设置和使用,一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。
<?php
$who = $_GET['who'];
$user1 = "Lisa";
$user2 = "Mark";
$user3 = "Daine";
echo $$who; //根据GET参数传的user1/user2/user3输出用户名
4. 变量类型的检测(内置函数的使用)
<?php
$a = 12;
$b = 12.5;
$c = false;
$d = NULL;
$e = '12.5';
if(isset($a)){ //isset()判断变量是否被定义
echo gettype($a); //返回变量的数据类型 integer
}
if(is_float($b)){
echo gettype($b); //double
}
if(is_bool($c)){
echo gettype($c); //boolean
}
if(is_null($d)){
echo gettype($d); //NULL
}
if(is_string($e)){
echo gettype($e); //string
}
5. 变量销毁
unset()函数
<?php
$a = 12;
echo $a; //12
unset($a);
echo $a; //Undefined Variable
6. 变量的赋值方式
<?php
//1. 传值赋值
$a = 12;
$b = 15;
$a = $b;
echo $a,$b,'<br />'; //1515
//2. 引用赋值
$b = &$a; //$b指向$a指向的内存空间
$a = 15;
$b = 12;
echo $a,$b,'<br />'; //1212
unset($a);
echo $a,$b,'<br />'; //NOTICE 12
常量
1. 常量命名方式
要求和变量相同,但习惯上用大写字母区别于变量
2. 常量定义
<?php
define('ZHU_MOUNTAIN',8848);
/*
define('ZHU_MOUNTAIN',8848.8); //ERROR 不能重复定义
ZHU_MOUNTAIN = 8848.8 //ERROR 不能再赋值
*/
FUNCTION EH(){
echo ZHU_MOUNTAIN; //全局有效性
}
EH(); //输出8848
3. 常量的检测
<?php
//常量的检测
if(defined('ZHU_MOUNTAIN')){
echo '常量HEIGHT已经定义';
}else{
echo '常量ZHU_MOUNTAIN未定义,我来定义','<br />';
define('ZHU_MOUNTAIN',8848);
}
if(defined('ZHU_MOUNTAIN')){
echo '常量ZHU_MOUNTAIN已经定义,值是',ZHU_MOUNTAIN,'<br />';
}
4. 动态常量
<?php
$who = $_GET['who'];
define("USER1","Lisa");
define("USER2","Mark");
define("USER3","Daine");
echo constant($who); //CONSTANT()函数返回常量值
运算符&表达式
算术运算符
<?php
$d = 5;
$e = 3;
echo $d + $e,'<br/>'; //8
echo $d - $e,'<br/>'; //2
echo $d * $e,'<br/>'; //15
echo $d / $e,'<br/>'; //1.66667 发生了类型转换(区别于C/Java等语言)
echo $d % $e,'<br/>'; //2 //取模结果的符号和被除数有关
赋值运算符
<?php
$a = $b = $c = 12; //从右往左运算,依次赋值
echo $a,'~',$b,'~',$c;
比较运算符
<?php
// >,>=,<,<=,==,!=,!==,=== 返回值均为bool型
$a = 2;
$b = "2";
if($a == $b){
echo 'aaaaaa'; //输出aaaaaa
}
if($a === $b){
echo 'bbbbbb'; //未输出
}
//"=="只表示值相同,"==="表示值和类型都相同
递增/递减运算符
<?php
$a = 1;
echo $a++; //1
echo $a--; //2
echo ++$a; //2
echo --$a; //1
逻辑运算符
<?php
/**************逻辑运算符*************************************
&&(and),||(or),!,xor(异或运算符,表达式值相同返回0,否则返回1)
***************************************************************/
//三元运算符 条件?返回值1:返回值2
echo 20>=12 && 6<12 ? 1 : 0; //1
echo (20<12 and 6<12) ? 1 : 0; //0 实际只执行了前半段,短路特性
echo 20>=12 || 6>12 ? 1 : 0; //1 实际只执行了前半段,短路特性
echo (20<=12 or 6>12) ? 1 : 0; //0
echo !(6>12) ? 1 : 0; //1
echo ((20>=12) xor (6<12) )? 1:0; //0
字符串运算符
<?php
$str1 = "Hello";
$str2 = "World";
$str = $str1 . ' ' . $str2; //字符串拼接
echo $str; //Hello World
位运算符
<?php
//&,|,~,^,<<,>>
$a = 12;
$b = 5;
/*
0000 1100
0000 0101
&|^--------------
*/
echo $a & $b; //4(10) =0000 0100(2)
echo $a | $b; //13(10)=0000 1101(2)
echo ~$a; //-13(10)=1111 0011(2) 涉及补码运算
echo $a ^ $b; //9(10)=0000 1001(2)
echo $a << 2; //48(10)=0011 0000(2)
echo $b >> 2; //1(10)=0000 0001(2)
流程控制
顺序语句
分支语句
<?php
/******
//条件语句解析:if满足条件1,执行语句段1,否则查看是否满足条件2,满足则执行语句段2,否则执行语句段3
//if-else判断有且仅有一段语句可以执行
*******/
if(条件1){
语句段1;
}else if(条件2){
语句段2;
}else{
语句段3;
}
//switch--case:适和于不同值,执行不同语句的情况,对if..if else..else的简化
$day = 9;
switch($day){
case 1:
echo '星期一';
break;
case 2:
echo '星期二';
break;
case 3:
echo '星期三';
break;
case 4:
echo '星期四';
break;
case 5:
echo '星期五';
break;
case 6:
echo '星期六';
break;
case 7:
echo '星期七';
break;
default:
echo '你来自火星';
}
循环语句
<?php
/******
while循环:满足条件1,则执行语句段,执行完后返回while判断,如果条件满足,继续执行,否则跳出循环
******/
while(条件1){
语句段;
}
/******
do..while循环:相比于while,会先执行一次语句,然后判断
******/
do{
语句段
}while(条件1);
/******
for循环:条件1一般是初始化,只执行一次,然后判断条件2是否满足,如果满足,执行语句段,最后执行条件3,一般是循环次数的变化,继续判断条件是否满足来执行语句段,不满足条件则跳出。
******/
for(条件1;条件2;条件3){
语句段
}
//break强制跳出循环,continue结束本次循环,继续下一次循环
函数
1. 函数的声明和调用
<?php
//函数声明
function foo($a,$b,$c=4){ //$c设置了默认参数(需置到函数参数列表的最后)
return $a+2*$b+3*$c; //函数执行结果返回
}
//函数调用
$res = foo(1,2);
echo $res;
/******************/
$str = 'foo';
echo $str(1,2); //可变函数,函数名可用变量值
2. 函数的作用域
函数体内部变量属于局部变量,每次调用函数会申请内存空间,函数结束后再释放。
函数体内部不可以使用外部变量,除非用global引用全局变量。
3. 函数的引用传参
<?php
$a = 12;
function foo($num){
return ++$num;
}
echo foo($a),$a; //1312
function foo2(&$num){
return ++$num;
}
echo foo2($a),$a;//1313
4. 超级全局变量(可在任何地方引用)
$_GET:URL请求中传的参数
$_POST:表单提交传的参数
$_REQUEST:$_GET,$_POST,$_COOKIE的数组
$_FILES:文件上传用
$_COOKIE:用户登陆用
$_SESSION:用户登陆用
$_SERVER:服务器和访客信息
$_GLOBALS:所有全局变量的一个注册表