PHP
简介
PHP是一种服务器端的HTML脚本/解释语言,快速书写动态网页
静态网页和动态网页
不解释
web访问流程
web网页发起》dns解析域名》服务器电脑》服务器软件
PHP基本语法
<meta charset="UTF-8">
<!DOCTYPE html>
<html>
<body>
<h1>Hello world</h1>
<?php
echo "I see you";
?>
</body>
</html>
PHP可以运行css,html,js语句,但是html,css,js文件里不能包含PHP语句
输出方法:echo print
不同点:
echo:输出多个字符串
print:输出一个字符串,并且返回1
<?php
echo "I see you";
print "I watting you","hhh";
?>
#以上内容会报错
<?php
echo "I see you";
echo print "I watting you";
?>
#会返回1
<?php
$a = print "I see you";
echo $a
?>
注释
不多解释
多行注释
/*
*/
变量
变量命名不多解释,对大小写敏感,必须以字母或下划线开头
推荐三种命名法:下划线,大驼峰,小驼峰
不用告诉php数据类型,会自动转换
命令行
可以像python一样在命令提示符里运行
<?php
$input = readline("请输入:");
echo "你输入的是:".$input;
?>
____________________________________________________________________________________________________________
<?php
$a = readline("请输入:");
$b = readline("请再输入:");
echo "你输入的是:" .($a + $b)
?>
#别问为什么中文不显示全面
<?php
echo "请输入内容:";
$input = fgets(STDIN);
echo "输入的内容是:".$input;
?>
数据类型
字符串,整数,浮点,布尔,数组,对象,资源类型,NULL
用var_dump()会返回数据类型和值,一般用于开发调试
echo gettype();只返回数据类型
<?php
$a = "I see you" ;
$b = "I watting you" ;
var_dump($a,$b) ;
echo "a的值是$a" ;
echo "<br>" ;
echo 'b的值是$b' ;
echo "<hr>" ;
echo gettype($a)
?>
整数
<?php
$A = 0721 ;
$B = -0721 ;
$C = 0x900 ;
$D = 0173 ;
$E = 0b1100 ;
echo var_dump($A) ;
echo var_dump($B) ;
echo var_dump($C) ;
echo var_dump($D) ;
echo var_dump($E) ;
?>
浮点数
<?php
$A = 3.14 ;
$B = 3.14e5 ;
$C = 8E-5 ;
echo var_dump($A) ;
echo var_dump($B) ;
echo var_dump($C) ;
?>
布尔型
<?php
$a = true ;
$b = false ;
?>
数组
分为一维数组和多维数组,在变量中存储多个值
<?php
$a = ["a","b","c"] ;
$c = array("a","b","c") ;
var_dump($a,$c)
?>
对象
需要封装和类知识
print("
") ; 格式化输出
NULL
表示变量无值,可设置变量为NULL来清空变量数据
resource 资源类型
略
HTML快速回顾
- 在VSCode里安装Live server插件
注释
<!--注释内容-->
标签语法
成对标签:
自闭合标签:
块级元素
h标签
h1-h6
p标签
<p>
</p>
div标签
行级元素
<span></span>
<a></a>
<b></b>
<strong></strong>
<i></i>
<em></em>
</img/>
标签属性
class id style
href
src width height alt
name
form表单
input输入框,单选框,多选框
select下拉框
label标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
12345d
<hr>
<h1>这是一个测试</h1>
<h2>这是一个测试</h2>
<h3>这是一个测试</h3>
<h4>这是一个测试</h4>
<h5>这是一个测试</h5>
<h6>这是一个测试</h6>
<p>
谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。
嗟叹红颜泪、英雄殁,人世苦多。山河永寂、怎堪欢颜。
</p>
<span>这是一个测试</span>
<br>
<a>这是一个测试</a>
<br>
<b>这是一个测试</b>
<br>
<strong>这是一个测试</strong>
<br>
<i>这是一个测试</i>
<br>
<em>这是一个测试</em>
</img/>
<br>
<form action="" method="post">
<input type="text" value="123">
<br>
<input type="radio" name="sex">
<br>
<input type="checkbox" name="sex">
<br>
<select name="a">
<option value="x1">x</option>
<option value="y1">y</option>
</select>
<br>
<label for="ch2">年龄</label>
<input type="checkbox" name="ab" id="ch1">
<input type="checkbox" name="cd" id="ch2">
</form>
<br>
</body>
</html>
实战,简易博客
<?php
$title = "魏鑫的博客";
$bgColor ="#66ccff";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title ?></title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
background-color: <?php echo $bgColor; ?>;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.navbar {
background-color: #333;
overflow: hidden;
}
.navbar a {
float: left;
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
.navbar a:hover {
background-color: #ddd;
color: black;
}
.title {
text-align: center;
margin-bottom: 20px;
}
.text-area {
width: 80%;
margin: 0 auto;
padding: 20px;
border: 1px solid #ccc;
background-color: #f9f9f9;
}
</style>
</head>
<body>
<div class="navbar">
<a href="#home">首页</a>
<a href="#about">关于我</a>
<a href="#posts">博客</a>
<a href="#contact">联系我</a>
</div>
<?php
$content = "这里是魏鑫的博客内容。您可以使用HTML和CSS编写自己的网页。";
$createDay = "2023.11.1";
?>
<div class="container">
<h1 class="title">欢迎来到我的博客</h1>
<div class="text-area">
<span class="create-day"><?php echo $createDay ?></span>
<?php echo $content ?>
</div>
<?php
$content = "魏鑫大傻逼"; //变量重复赋值,代码执行自上而下
$createDay = "2323.23.23"
?>
<div class="text-area">
<span class="create-day">2023.09.22</span>
个人介绍
</div>
<?php
$createDay = "2233.22.11";
echo '
<div class="text-area">
<span class="create-day">'.$createDay.'</span>
文章列表
</div>
'
?>
<div class="text-area">
<span class="create-day">2023.09.21</span>
联系方式等
</div>
<div class="text-area">
<span class="create-day"><?php echo $createDay ?></span>
<?php echo $content ?>
</div>
</div>
</body>
</html>
EOF(heredoc)定界符
- 以«<EOF开始标记开始,以EOF结束标记结束
- 结束标记必须顶头写,独一行写,不能有缩进和空格
- EOF 可以用任意其它字符代替,开始标记和结束标记相同即可,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。
- 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc中,变量不需要用连接符.或,来拼接
- 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义。
<?php
$a = "sqqq";
echo <<<EOF 12312341234$a sadfadsf
EOF;
?>
echo <<<EOF
"双引号外所有被排列好的格式都会被保留"
"但是双引号内会保留转义符的转义效果,比如table:\t和换行:\n下一行"
你看页面有\t吗?
\n \t 和引号没关系吧
'单引号 \t \n是否能看到'
总结:php里连接字符串与变量的方法
1.直接连接
$name = "wx";
echo "hello,".$name;
echo 'hello'.$name;
echo "hello,$name";
........
2.echo输出多个变量
$name = "world";
echo "hello,$name";
EOF定界符(heredoc)和(nowdoc)
php
$name = 'hello';
echo <<<EOF
$name world
EOF;
$name = "hello";
echo <<<"EOF"
$name world
EOF;
4.模板字符串
echo "hello,{$name}";
$name = ["name" => "hello"];
echo "hello,{$name['name']}";
5.printf()和sprintf()
printf是直接输出,不返回任何值
sprintf不输出,但有返回值
$name = "hello";
$age=35;
printf("魏鑫%s,今年%s",$name,$age);
运算符
运算符 | 名称 | 描述 | 实例 | 结果 |
---|---|---|---|---|
x + y | 加 | x 和 y 的和 | 2 + 2 | 4 |
x - y | 减 | x 和 y 的差 | 5 - 2 | 3 |
x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 |
x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 | 1 2 0 |
-x | 设置负数 | 取 x 的相反符号 | <?php $x = 2; echo -$x; ?> |
-2 |
~x | 取反 | x 取反,按二进制位进行"取反"运算。运算规则:~1=-2; ~0=-1; |
<?php $x = 2; echo ~$x; ?> |
-3 |
a . b | 并置 | 连接两个字符串 | “Hi” . “Ha” | HiHa |
<?php
$x = 10;
$y = 6;
echo ($x + $y);
echo "<br>";
echo ($x - $y);
echo "<br>";
echo ($x % $y);
echo "<br>";
echo -$x;
//整数之间的整除,参数也必须是整数,向下取整
var_dump(intdiv(10,3));
?>
运算符 | 等同于 | 描述 |
---|---|---|
x = y | x = y | 左操作数被设置为右侧表达式的值 |
x += y | x = x + y | 加 |
x -= y | x = x - y | 减 |
x *= y | x = x * y | 乘 |
x /= y | x = x / y | 除 |
x %= y | x = x % y | 模(除法的余数) |
a .= b | a = a . b | 连接两个字符串 |
递增/递减运算符
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
– x | 预递减 | x 减 1,然后返回 x |
x – | 后递减 | 返回 x,然后 x 减 1 |
比较运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5===“5” 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 不绝对等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!==“5” 返回 true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
逻辑运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true |
条件语句
<?php
$a = 2;
if ($a == 3){
echo $a;
}
elseif ($a == 4){
echo $a;
}
else{
echo "no";
}
<?php
$a = 20;
$b = 40;
switch ($a - $b) {
case 10:
echo "1";
break;
case 20:
echo "2";
break;
default:
echo "3";
}
<?php
$a = 20;
$b = 40;
for ($c = 0; $c < 10; $c++) {
echo "num:".$c.PHP_EOL; //PHP_EOL表示换行符
}
数组
$a = array("1","2","3");
$b = ["1","2","3"];
///////////////////////////
$a[0] = "1";
$a[1] = "2";
$a[2] = "3";
print_r($a);
关联数组
$a = ["a"=>"1","b"+>"2"];
////////////////////////////
$a["a"] = "1"
遍历数组
<?php
$b = ["1","2","3"];
$a[0] = "1";
$a[1] = "2";
$a[2] = "3";
foreach ($a as $key => $value) {
echo $key.": ".$value."\n";
}
多维数组
$a [["a1","a2","a3"],"b","c"];
print_r([0][0]);
#可以嵌套foreach,用if和break组合玩
函数
时间函数:time(),date()
<?php
var_dump(time());
$a = date('y-m-d H:i:s');
echo $a;
创建函数
function a(){
echo date('y-m-d H:i:s');
}
a();
传入参数
function a($b,$c){
echo $c+$b;
}
a(2,3);
a(2,3.3);
严格模式
declare(strict_types=1);
function a(int $b,int $c){
echo $c+$b;
}
a(2,3.3);
全局变量
$a = 3;
function an(){
$b = 2;
global $a;
echo $a + $b;
}
an();
static作用域
<?php
function func1(){
static $a = 0;
$a++;
echo $a.PHP_EOL;
}
func1();
func1();
func1();
unset() 删除函数 isset()查询是否有这变量
超级全局变量
$GLOBALS
是一个包含了全局变量的全局组合数组,变量名就是数组的键
print_r($GLOBALS);
$a = 'sss';
$b = 23;
function a(){
global $a,$b;
$a = 'www';
$b = 13;
}
print_r($GLOBALS);
a();
echo $a;
echo $b;
$_SERVER
print_r(_SERVER);
- 详情查询菜鸟
#接受一个正整数,返回处1与本身的所有因子
<?php
<?php
$b =[];
function func1($a){
for ($i = 2; $i < $a; $i++) {
global $b;
if ($a % $i === 0){
$b[] = $i;
}
}
}
func1(12);
foreach ($b as $c => $d) {
echo $c." = ".$d."\n";
}
其他运算符
#+号合并
<?php
$a = ["a"=>"b",1=>["c"=>"d"]];
$b = ["w"=>"s"];
print_r($a+$b);
#== 比较两数组是否相等 ===比较两数组键值对,顺序,类型是否相等
<?php
$a = ["w"=>1];
$b = ["w"=>"1"];
var_dump($a==$b);
var_dump($a===$b);
!=和!==使用方法与上面一样,<,>也是
三元运算符
$a = 10;
$b = isset($a)? $a:"no";
空合并运算符
组合比较符
<=>
比较
数据类型的比较
if (42 == "42"){
echo "true";
}
/////////////////
if (42 === "42"){
echo "true"
}
可用gettype()只比较数据类型
比较underfined,0,false,null,空值
<?php
$a = NULL;
var_dump(!isset($a));
var_dump(is_NULL($a)); //不定义$a要报错
var_dump(empty($b)) //empty()不定义变量也返回True
字符串相关函数
<?php
$a = "God help thouse who stand in our way";
$b = "12 3";
echo strlen($b);
echo strlen($a);
////////////////////////
echo strpos($a, "h").PHP_EOL;
echo stripos($a, "w").PHP_EOL;
echo strrpos($b, "h").PHP_EOL;
$aa = explode(" ", $a);
var_dump($aa);
echo implode("+", $aa).PHP_EOL;
print_r(str_replace("h","t",$a));