小知识
IP 127.0.0.1 在windows等系统的正确解释是:本机地址(本机服务器)
B站视频地址:PHP快速从入门到半吊子
基本语法
# 双引号可以解析单引号的值
$a=‘45‘;
$b="11$a";
echo $b;
# 输出
1145
# 变量连接(因为php是弱类型语言)
echo $a.$b
# 输出
451145
输入输出
# 通过 $_GET 或 $_POST 超全局变量来接收参数
# 输出变量有 print_r() | var_dump() | print() | var_export()
// 可代理操作的软件有 postman 或 BurpSuite
// http://127.0.0.1/index.php?a=hello&b=world
# $_GET 用于接收参数
echo $_GET[‘a‘],$_GET[‘b‘];
# $_POST 至今搞不懂
# print_r() 输出数组或对象
print_r($_GET);
# var_dump() 输出数组或对象,并带上数据类型
var_dump($_GET);
# print() // 和 print_r() 一样,但只能输出一个参数
print(json_encode($_GET));
# var_export() // 和 var_dump() 一样,只能输出符合php的合法代码
var_export($_GET);
# 输出
helloworld
Array ( [a] => hello [b] => world )
array(2) { ["a"]=> string(5) "hello" ["b"]=> string(5) "world" }
{"a":"hello","b":"world"}
array ( ‘a‘ => ‘hello‘, ‘b‘ => ‘world‘, )
基本变量
# 字符串
$a = "字符串:\x61";
var_dump($a);
# 数值
$b = 0x66;//十六进制
$c = 066;//八进制
var_dump($b,$c);
# 数组
$d = [1,2,3]; //php 5.4 以后才支持的写法
$e = array(1,2,3);
$f = array(
‘a‘=>1,
‘b‘=>2,
‘c‘=>3
);
var_dump($d,$e,$f);
# 输出
string(11) "字符串:a"
int(102)
int(54)
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) }
数组详解
$a = array(1,2,3,4,5);
$b = [‘abc‘,$a,2,3,1];
$c = [
‘a‘=>‘666‘,
‘b‘=>233,
‘c‘=>[
10,20,30,40
]
];
# 都代表在最后插入一个元素
$a[] = 6;
array_push($a,7);
var_dump($a);
// 输出
// array(7) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) }
# 删除最后一个元素
$d = array_pop($a);
var_dump($d);
echo "<br />";
var_dump($a);
// 输出
// int(7)
// array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) }
# 取出最后一个元素,不删除
$d = end($a);
var_dump($d);
echo "<br />";
var_dump($a);
// 输出
// int(6)
// array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) }
# 取出第一个元素,并删除
array_shift($a);
var_dump($a);
// 输出
// array(5) { [0]=> int(2) [1]=> int(3) [2]=> int(4) [3]=> int(5) [4]=> int(6) }
# 给出总元素个数
$d = count($c);
var_dump($c);
// 输出
// array(3) { ["a"]=> string(3) "666" ["b"]=> int(233) ["c"]=> array(4) { [0]=> int(10) [1]=> int(20) [2]=> int(30) [3]=> int(40) } }
# 排序
sort($b);
var_dump($b);
// 输出
// array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> string(3) "abc" [4]=> array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } }
# 根据键排序
ksort($b);
var_dump($b);
// 输出
// array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> string(3) "abc" [4]=> array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } }
# 判断存在某个元素
$d = isset($a[6]);
var_dump($d);
// 输出
// bool(false)
# 返回数组的键
$d = array_keys($a);
var_dump($c);
// 输出
// array(3) { ["a"]=> string(3) "666" ["b"]=> int(233) ["c"]=> array(4) { [0]=> int(10) [1]=> int(20) [2]=> int(30) [3]=> int(40) } }
# 删除某个成员,但键值不会变(存在bug,不常用)
unset($a[1]);
var_dump($a);
// 输出
// array(4) { [0]=> int(2) [2]=> int(4) [3]=> int(5) [4]=> int(6) }
# 去掉数组中的某一部分并用其他值取代,第二个参数是起始位置
# 第三个参数是删除/替换长度,第四个参数不写就是删除
array_splice($a,1,2,array(1,2));
var_dump($a);
// 输出
// array(4) { [0]=> int(2) [1]=> int(1) [2]=> int(2) [3]=> int(6) }
分支结构
# 异或
var_dump(1 xor 0);
// 输出
bool(true)
# if | else | else if
if($_GET[‘user‘]==‘xiaotuan‘) {
if(isset($_GET[‘password‘]) && $_GET[‘password‘]==‘yes‘) {
echo ‘登入成功‘;
} else {
echo ‘登入失败‘;
}
} else if($_GET[‘user‘]==‘pork‘) {
echo ‘登入成功‘;
} else {
echo ‘登入失败‘;
}
// 输出
// http://127.0.0.1/index.php?user=xiaotuan&&password=yes
# 登入成功
// http://127.0.0.1/index.php?user=pork
# 登入成功
// http://127.0.0.1/index.php?user=xiaotuan&&password=no
# 登入失败
# switch
switch($_GET[‘user‘]) {
case ‘xiaotuan‘:
case ‘yes‘:
case ‘no‘: {
echo ‘登入成功‘;
break;
}
default: {
echo ‘登入失败‘;
break;
}
}
// 输出
// http://127.0.0.1/index.php?user=xiaotuan
# 登入成功
// http://127.0.0.1/index.php?user=pork
# 登入失败
循环结构
# for 循环
for ($i = 0; $i < 10; $i++) {
echo "$i ";
}
# while 循环
$i = 0;
while ($i < 10) {
echo "$i ";
$i++;
}
# do while 循环
$i = 0;
do {
echo "$i ";
$i++;
} while ($i < 10);
# foreach 循环
$a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach($a as $key=>$value) {
echo "$key=>$value".‘<br />‘;
}
print_r($a);
# 输出
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0=>0
1=>1
2=>2
3=>3
4=>4
5=>5
6=>6
7=>7
8=>8
9=>9
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
include & require
# include
// 相当于头文件,当所需头文件不存在,只会警告
include "head.php";
# include_once
// 与 include 类似,但整个文件仅加载一次
include_once "head.php";
# require
// 相当于头文件,当所需头文件不存在,会报错
require "head.php";
# require_once
// 与 require 类似,但整个文件仅加载一次
require_once "head.php";
# 补充
// 也可以将头文件设置为变量
$config = include "head.php";
全局变量 & 函数
/*
超级全局变量可以这样看,因为它是相对于全局变量而言的。
比全局变量更一个层次,全局变量不能作用到函数内部。
超全局变量可以作用到函数内部
*/
# 超全局变量
global $a;
$a = ‘默认值1‘;
$GLOBALS[‘b‘]=‘默认值2‘;
print_r($GLOBALS);
# 输出
// Array ( [_GET] => Array ( ) [_POST] => Array ( ) [_COOKIE] => Array ( ) [_FILES] => Array ( ) [GLOBALS] => Array *RECURSION* [a] => 默认值1 [b] => 默认值2 )
# 函数
// 函数名是大小写无关
function fun() {
echo "123";
}
Fun();
# 输出
123
# 嵌套函数
// PHP的内部函数只要执行了,就是全局函数
function fun1() {
function fun2() {
echo "456";
}
echo "123";
}
fun1();
fun2();
# 输出
123456
# 超全局变量/全局变量和函数的运用
global $a;
$a = ‘默认值‘;
$GLOBALS[‘b‘]=‘默认值‘;
function func() {
global $a;
echo $a;
echo $GLOBALS[‘b‘];
}
func();
# 输出
//默认值默认值
PHPmyadmin 数据库
# 面向过程的连接数据库
$con=@mysqli_connect(‘127.0.0.1‘,‘root‘,‘‘,‘demo‘);
if(!$con) {
echo "数据库连接失败";
return;
}
# 面向对象的连接数据库
$object = @new mysqli(‘127.0.0.1‘,‘root‘,‘‘,‘demo‘);
if($object->connect_errno) {
echo "数据库连接失败";
return;
}
# 使用编码
mysqli_query($con,‘set names utf8‘);
// 使用中文
// mysqli_query($con,‘set names gbk‘);
# 插入数据
// MySQL指令
insert into `demo_table`(`data1`,`data2`) value(‘data1‘,‘data2‘);
// php指令
mysqli_query(
$con,
"insert into `demo_table`(`data1`,`data2`) values(‘{$_GET[‘data1‘]}‘,‘{$_GET[‘data2‘]}‘)"
);
// http://127.0.0.1/demo/?data1=test1&data2=test2
# 修改数据
// 混合指令
$sql = "update `demo_table` set `data1`=‘{$_GET[‘data1‘]}‘,`data2`=‘{$_GET[‘data2‘]}‘ where id={$_GET[‘id‘]}";
if (mysqli_query($con, $sql)) {
echo ‘修改成功了‘;
} else {
echo ‘修改失败了‘;
}
# 更新、条件、查询、删除、索引 略
// 视频 P20 P21 没看
补充
- 要加分号
- 大小写敏感
- 可以不写结尾
?>
- 注释可以用 #、//、/**/ 三个
- 换行只能用
echo "<br />";
中的 - 视频 类 部分没仔细看
- 新特性可以看这个视频,但我懒,不想看