PHP

小知识

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 没看

补充

  1. 要加分号
  2. 大小写敏感
  3. 可以不写结尾 ?>
  4. 注释可以用 #、//、/**/ 三个
  5. 换行只能用 echo "<br />"; 中的
  6. 视频 类 部分没仔细看
  7. 新特性可以看这个视频,但我懒,不想看

PHP

上一篇:C++ explicit关键字应用方法详解


下一篇:Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记