1、基本语法
<?php
echo 'hello world';
// 如果文档中只有PHP代码,结束标记要省略掉
<?php
echo "12345";
// 如果文档中不只有PHP代码,要保证标记成对出现,可以出现在任意位置,出现多次都可以
# 注释
/*注释*/
?>
/*
PHP文档的组成:
PHP代码,
HTML,
css,
JavaScript/jquery
PHP的语法规范:
需要以;进行结束
PHP的注释:
// c++风格
# shell风格
在源代码中看不到注释,只有在源文件中能看到
*/
2、变量和数据类型
2.1 变量
<?php
// 1、什么是变量? - 在程序执行期间可以变化的量(通过变量保存值)
// 2、声明变量 - 通过$符号加上一个变量名称来表示变量(可以声明一个,也可以声明多个)
$username='szr';
$age=23;
$email='szr190@163.com';
$tel=1210288348;
$marry=true;
$var;
/*
注意:
(1)以字母或者下划线开始,不能出现特殊字符
(2)最好含义明确
(3)命名的时候最好遵守驼峰或者下划线命名法
(4)严格区分大小写
(5)出现变量重复,会进行覆盖
(6)php是弱类型语言,变量可以不声明直接使用
*/
// 驼峰
$firstName;
$FirstName;
// 下划线
$first_name;
// 使用变量直接使用变量的名称即可
// 可变变量的例子
$i='j';
$j='k';
$k='hello world';
echo $$$i;
?>
2.2 整型 / 浮点型 / 布尔型
<?php
// php中的数据类型
/*
8种主要数据类型
标量类型(只能存储单一数据) - 整型、浮点型、布尔型、字符串型
复合类型 - 数组(Array)、对象(Object)
特殊类型 - 资源、空(null)
*/
// 整型
// $var=123;
// $var = -12;
$var = 0123;//涉及到了进制的转换
$a = 12;
echo $var;
echo "<br/>";
var_dump($var,$a);//打印变量的详细信息,可以一次打印一个或者多个
// 浮点型
// $float=12.3;
// $float=-12.3;
// 科学计数法的形式
$float=2e3;//2乘以10的3次方 2000
var_dump($float);
// 布尔型
// $bool=true;
$bool=TRUE;
var_dump($bool);
?>
2.3 字符串类型
<?php
// 设置文档类型和字符编码
header('content-type:text/html,charset=utf-8');
// 数据类型 - 字符串型
// 定界符 '' ""
// 单引号不解析变量,而双引号是解析变量的
$num=1;
$userName = 'king,$num';
$email="1210288348@qq.com,$num";
$string='';//空字符串也是字符串,length表示长度
var_dump($userName);
echo $userName,$email,$string;
echo "<br/>";
// 转义符
/*
\n(换行) \r(回车) \t(水平制表符) \' \" \\
*/
$str='I\'am a boy student \\';
var_dump($str);
// 单引号只解析\'和\\,而双引号所有转义符都解析
echo "<br/>";
$name = 'szr';
echo "我的名字是$name这是我";
// {}的用法
// {}可以将PHP中的变量扩成一个整体来解析
echo "我的名字是{$name}这是我";//PHP在解析变量的时候会尽可能的往后取,认为越往后越合法
echo "我的名字是${name}这是我";
echo "<br/>";
// {}可以对字符串中的指定字符做增删改查的操作
// 下标从0开始
$string='abcdef';
echo $string{0};
echo $string{3};
echo "<br/>";
// 修改的时候只能一对一的进行修改,不要对中文字符做操作
$string{1}='z';
echo $string;
echo "<br/>";
// 删除的时候相当于拿空字符串进行替换
$string2='bcdfekhi';
$string2{3}='';
echo $string2;
echo "<br/>";
// 添加字符,一次添加一个
$string3='abc';
$string3{5}='d';//会有空格展示
echo $string3;
?>
2.4 heredoc / nowdoc
<?php
// heredoc - 相当于双引号 - 在结束名称之前不能有任何的输出
// 用""来写
$id=2;
$username='jerry';
$email='szr190@163.com';
$str="<table border='1'>
<tr>
<td>编号</td>
<td>用户名</td>
<td>邮箱</td>
<tr>
<tr>
<td>{$id}</td>
<td>{$username}</td>
<td>{$email}</td>
<tr>
</table>";
// 用heredoc
$str1 = <<<ET
heredoc test!!!
ET;
echo $str1;
$str2=<<<"TABLE"
<table border='1'>
<tr>
<td>编号</td>
<td>用户名</td>
<td>邮箱</td>
<tr>
<tr>
<td>{$id}</td>
<td>{$username}</td>
<td>{$email}</td>
<tr>
</table>
TABLE;
echo $str2;
// nowdoc - 相当于单引号的作用 - 其余的用法和heredoc一致
2.5 复合类型 / 特殊类型
<?php
// 设置错误级别,E_ALL但是除了NOTICE
error_reporting(E_ALL&~E_NOTICE);
// 复合类型
// 声明一个数组
$arr=array();
var_dump($arr);
$arr=array('12','king',true,1.2);
var_dump($arr);
// 对象
$obj=new stdClass();
var_dump($obj);
// 特殊类型
// 资源(Resource) - 是需要数据库来操纵的
// 空(null)
// 1.变量未声明直接使用
$var1;
var_dump($var1);
// 2.声明一个变量赋值为null
// 3.经过unset()注销过的变量
$var2=123;
unset($var2);
var_dump($var2);
?>
2.6 数据类型转换之自动转换
<?php
// PHP数据类型转换
// 1、自动转换(隐式转换) - 程序会根据上下文环境自动进行转换
// 其它类型转换成数值型
$a=1+true;
echo $a;//2
echo "<br/>";
$b=1+false;
echo $b;//1
echo "<br/>";
$c=1+null;
echo $c;//1
echo "<br/>";
$d=1+'3king';
echo $d;//4
echo "<br/>";
$e=1+'2a3b4d';//只取到了合法部分
echo $e;//3
echo "<br/>";
$f=1+'true';//需要以合法字符开始,否则直接置为0
echo $f;//1
echo "<br/>";
// 其它类型转换成字符串型
echo true;//1
echo false;//空字符串
echo null;//空字符串
$arr=array();
echo $arr;
// 对象不能直接转换成字符串,会报致命错误
echo "<br/>";
// 其它类型转换成布尔型
// 列举出哪些是假的情况,其余都是true
if(""){
echo "I am Jerry";
}else{
echo "I am Szr";
}
// 0 -> false
// 0.0 -> false
// 空字符串 '' "" '0' "0" -> false
// null -> false
// 空数组 -> false
?>
2.7 数据类型转换之临时转换
<?php
// 数据类型转换之临时转换,属于强制转换 - (不改变本身,只是临时)
// 方式1:变量类型$变量名称
$var = true;
$res=(int)$var;
var_dump($res);//1
echo "<br/>";
$var1=3.6;
var_dump((string)$var1,(bool)$var1,(unset)$var1,(object)$var1);
echo "<br/>";
// 方式2:通过系统函数实现
$var2=11;
var_dump(floatval($var2),strval($var2));
echo "<br/>";
?>
2.8 数据类型转换之永久转换
<?php
// 数据类型转换之永久转换,属于强制转换
// settype($var,$type) - 设置变量的类型
$v = 123;
settype($v,'boolean');
var_dump($v);
// gettype($var) - 返回变量的类型
$var = true;
var_dump(gettype($var));
echo "<br/>";
?>
2.9 函数库检测数据类型
<?php
// 通过变量函数库来检测变量的类型
// is_init()
// is_float()
// is_string()
// is_bool()
// is_scalar() 检测是否是标量
// is_null() 检测是否为空
// is_array() 检测是否为数组
// is_object() 检测是否是对象
$var=0;
var_dump(
is_int($var),
is_float($var),
is_bool($var),
is_null($var)
);
?>
3、常量
3.1 系统常量和自定义常量
<?php
// 什么是常量 :是一个简单值的标识符,一旦定义在脚本定义期间是不可以改变的
// 系统常量(拿来就可以直接使用的,系统提供的)
echo PHP_VERSION;//版本
echo "<br/>";
echo PHP_OS;//运行系统
echo "<br/>";
echo PHP_INT_MAX;//整数的最大值
echo "<br/>";
// 自定义常量
// 1、如何定义常量
// (1)define($name,$value);
/*
需要注意:
- 常量名称不加$
- 默认区分大小写
- 名称最好大写
- 常量作用域是全局的
- 在脚本期间是不能改变的
- 可以是标量类型,也可以是数组
*/
define('TEST',123);
define('USERNAME','Jerry');
// (2)const关键字定义常量
const ZERO = 'Szr';
const WEB_LOG_URL='http://szr190.com';
echo ZERO;
echo "<br/>";
// 2、使用常量
// (1) 直接使用常量的名称
echo TEST;
echo "<br/>";
// (2) 使用constant获取常量的值
echo constant('TEST');
echo "<br/>";
// 3、如何判断常量是否存在
var_dump(defined('TEST'));
// 4、获取所有已经定义的常量
$var = get_defined_constants();
print_r($var);
?>
3.2 魔术常量
<?php
// 魔术常量
/*
__LINE__ 得到当前的行号
__FILE__ 得到当前文件的完整绝对路径和文件名
__DIR__ 得到文件的完整绝对路径
*/
echo __LINE__;
echo "<br/>";
echo __FILE__;
echo "<br/>";
echo __DIR__;
echo "<br/>";
?>
3.3 $_POST
<?php
// 预定义变量
// 1、概念:PHP提供给大家直接就可以使用的变量,所有的预定义变量都是全局变量
// 2、分类
/*
$GLOBALS 超全局变量(包含以下所有的预定义变量)
$_SERVERS 服务器和执行环境信息变量
$_ENV 环境变量
$_COOKIE
$_SESSION
$_FILES
$_GET 主要接收以?形式传递的数据,像表单以get形式发送数据,包括像超链接典型的?形式传递参数
$_POST 主要接收表单以post形式发送的数据
$_REQUEST = $_POST + $_GET + $_COOKIE;
*/
header('content-type:text/html;charset=utf-8');
echo $_POST['username'];
echo "<br/>";
echo $_POST['password'];
echo "<br/>";
echo $_POST['email'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>注册页面</title>
</head>
<body>
<form action="doReg.php" method="post">
<table border="1" width="70%" cellpadding="0" cellspacing="0">
<tr>
<td>用户名:</td>
<td><input type="text" name="username" placeholder="请输入用户名"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" placeholder="请输入密码"></td>
</tr>
<tr>
<td>邮箱:</td>
<td><input type="email" name="email" placeholder="请输入合法邮箱"></td>
</tr>
<tr>
<td><input type="submit" value="立即注册"></td>
</tr>
</table>
</form>
</body>
</html>
3.4 $_GET
<?php
// 接收以?传参的数据,需要以$_GET
$key=$_GET['keywords'];
echo $key;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<h1>搜索</h1>
<form action="doSearch.php" method="get">
<input type="search" placeholder="请输入您要搜索的内容" name="keywords">
<input type="submit" value="搜索">
</form>
</body>
</html>
3.5 超链接参数传递
<?php
echo $_GET['username'];
echo "<br/>";
echo $_GET['age'];
echo "<br/>";
echo $_GET['a'];
echo "<br/>";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<a href="doTest.php?username=king&age=12&a=1&b=2&c=3">Test</a>
</body>
</html>
4、运算符
4.1 算术运算符
<?php
// 什么是表达式?只要是有值的东西都叫做表达式
// PHP运算符 - 算术运算符
// + - * / %
$a=3;
$b=5;
echo $a+$b;
echo "<br/>";
echo $a-$b;
echo "<br/>";
echo $a*$b;
echo "<br/>";
echo $a/$b;
echo "<br/>";
echo $a%$b;
?>
4.2 递增递减运算符
<?php
// 递增递减运算符
// 1、前缀形式 ++$var; --$var; 先加减,再执行
$i=1;
++$i;
echo $i;//2
echo "<br/>";
// 2、后缀形式 $var++; $var--; 先执行,再加减
$j=5;
$j--;
echo $j;//4
echo "<br/>";
// 3、注意点
// (1)浮点型是支持递增递减的
$var = 1.2;
$var++;
echo $var;
echo "<br/>";
// (2)布尔型是不支持递增递减的
$var1=true;
$var++;
echo $var1;//1
echo "<br/>";
// (3)null是支持递增的,但是不支持递减
$var2=null;
// $var2++;
// echo $var2;//1
$var2--;
echo $var2;//null
echo "<br/>";
// (4)字符串是支持递增的,但是不支持递减
$var3="a";
// $var3++;
// echo $var3;//b
$var3--;
echo $var3;
echo "<br/>";
// 4、ASCII值
$str='a';
// (1)根据字符得到相应的码值
echo ord($str);//97
echo "<br/>";
// (2)根据码值得到相应的字符
echo chr(98);//b
?>
4.3 字符连接符
<?php
// 字符连接符 .来连接字符串
echo 'a'.'b'.'c';//abc
echo "<br/>";
$str1='g';
$str2='h';
$str3=$str1.$str2;
echo $str3;//gh
?>
4.4 赋值运算符
<?php
// 赋值运算符
// = += -= *= /= .= %=
$a=1;
$a+=2;
echo $a;//3
echo "<br/>";
$username='szr';
echo $username.'king';//szrking
echo "<br/>";
// mt_rand() 产生随机数
echo mt_rand(1,10);
?>
4.5 比较运算符
<?php
// 比较运算符
// 类型都是布尔类型,不是true就是false
// 具体见图片(比较.png)
var_dump(
3>1,
2<4,
'2'==2,
'2'===2,//需要类型也是一致的
1<>2//不等于
);
?>
4.6 逻辑运算符和错误抑制符
<?php
// 逻辑运算符 - 结果也是布尔类型
// && and (与) - 都为true才为true
// || - 一个为true就为true
// !- 取反
// xor - 异或(不同为) true xor true = false
var_dump(
true && true,
true && false
);
var_dump(
true || true,
true ||false,
false || false,
true xor true//false
);
$i=1;
$j=0;
var_dump(
!0,//true
++$absnndnsk && --$sdsfdf,//false
--$i || --$j//true
);
// 错误抑制符 - @
$var = 123;
@settype($var,'king');
?>
4.7 三元运算符和优先级
<?php
// 三元运算符
// exp1?exp2:exp3 如果exp1为true,执行?之后的exp2,否则执行:之后exp3
echo 1>3?"yes":"no";//no
// 运算符的优先级 - 通过()去改变;有短路的情况优先考虑短路情况
?>
5、流程控制
5.1 流程控制之条件语句
<?php
// 流程控制语句之条件语句
if(1<3) echo "yes";
echo "<br/>";
if(4>5){
echo "yyyy";
}else if(5<4){
echo "nnnn";
}else{
// if嵌套
if(1==="1"){
echo "ynynyn";
}else{
echo "111111";
}
}
?>
5.2 流程控制之switch case
<?php
// switch...case
$var=12;
switch($var){
case 10:
echo "111";
break;
case 11:
echo "222";
break;
case 12:
echo "333";
break;
default:
echo "444";
}
?>
5.3 流程控制之for循环
<?php
// for循环
/*
for(1;2;3){
循环体;
}
1 - 初始化赋值,无条件的执行第一个表达式
2 - 在每次循环开始前求值,看是否为true,若是执行循环体,否则循环结束
3 - 做求值操作(增/减量操作)
重复的事情或者有规律的事情要想到用循环
*/
for($i=1;$i<=100;$i++){
echo $i;//1-100
echo "<br/>";
}
echo 'continue...<br/>';
echo $i,"<br/>";//101
// 输出h1-h6
for($m=1;$m<=6;$m++){
echo "<h{$m}>Hello PHP</h{$m}>";
}
// 输出1-100之间的奇数
for($n=1;$n<=100;$n++){
if($n%2==1){
echo $n,"<br/>";
}
}
// for循环的特殊形式
// (1)死循环
// for($s=1;$s>=0;$s++){
// echo $s,"<br/>";
// }
// 如果写了死循环可以通过break结束for语句
for($s=1;$s>=0;$s++){
if($s>10){
break;
}
if($s==3){
// continue 是跳过当次循环进入下一次,可以应用于for,while,do...while
continue;//就是少了3
}
echo $s,"<br/>";
}
// (2)嵌套的for结构
for($e=1;$e<=3;$e++){
echo "外部循环执行第'.$e.'次<br/>";
for($r=1;$r<=2;$r++){
echo "内层循环执行第'.$r.'次<br/>";
}
echo "<hr/>";
}
// (3)for循环的第二种展现形式
for($t=1;$t<=9;$t++):
echo $t,"<br/>";
echo "<hr/>";
endfor;
// (4)提取到外部的形式 - 当省略第二个表达式的时候永远为真,就又成为死循环了
$u=1;
for(;$u<=8;$u++){
echo $u,"<br/>";
}
?>
5.4 流程控制之while dowhile goto
<?php
// while
/*
while(条件){
循环体;
}
*/
while(false){
echo "Hello World <br/>";
}
// do...while
/*
do{
无条件的先执行一遍循环体
}while(条件);
*/
do{
echo "Hello World do <br/>";
}while(false);
// goto语句 - 是不可以跳进循环的,但是是可以跳出循环的
echo "starting.......";
echo "<hr/>";
goto TEST;
echo "this is a test<br/>";
TEST:
echo "Hello King";
?>