PHP学习笔记

PHP学习笔记

PHP简介

  • PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
  • PHP 可免费下载使用。

第一个PHP程序

新建一个hello.php文件,输入一段代码,运行。
PHP基本代码格式为以 ‘<?php’ 开头,以 ‘?>’ 结尾,当php文件只是一个单独的文件并未嵌入到html页面中时,可以不用写?>结尾

<?php
echo "Hello world!";  //echo表示打印内容到控制台
?>

在这里插入图片描述

PHP的变量

变量以$开头加变量名称

<?php
$a = 1;
$b = 1;
echo $a + $b;  //2

PHP 有四种不同的变量作用域:

  • local 局部变量作用域,在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问
<?php
function myTest()
{
    $y = 10; // 局部变量
}
  • global 全局变量作用域,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 $GLOBALS[变量名]访问。
<?php
$x = 5; // 全局变量
function myTest()
{
    $y = 10; // 局部变量
    $GLOBALS['x'] = 10;
    echo $GLOBALS['x'];  //10
}
myTest();
  • static 静态变量作用域,当一个函数完成时,它的所有变量通常都会被删除。然而,有时候希望某个局部变量不要被删除。声明变量时使用 static 关键字
<?php
function myTest()
{
    static $x = 0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符
}

myTest();   //x=0
myTest();  //x=1
myTest();  //x=2

  • parameter 参数变量作用域,参数是通过调用代码将值传递给函数的局部变量。
<?php
function myTest($x)
{
    echo $x;
}
myTest(5);

PHP的输出语句

  • echo
<?php
echo "hello";  //echo输出内容
  • print
<?php
print "hello";  //输出内容
printf("%d%s",25,"hello");  //对内容进行格式化输出

PHP数据类型

  • String(字符串)
<?php
$a="hello";
  • Integer(整型)
    可以以0x,0开头指定输入的进制数,但是最终输出都会是十进制
<?php
$x = 5;
var_dump($x); //int(5)
echo "<br>";
$x = -3; // 负数 int(-3)
var_dump($x);
echo "<br>";
$x = 0x8C; // 十六进制数 int(140)
var_dump($x);
echo "<br>";
$x = 047; // 八进制数 int(39)
var_dump($x);


  • Float(浮点型)
<?php
$x = 10.365;  //float(10.365)
var_dump($x);
echo "<br>";
$x = 2.4e3;
var_dump($x); //float(2400)
echo "<br>";
$x = 8E-5;
var_dump($x); //float(8.0E-5)

  • Boolean(布尔型)
<?php
$x=true;
$y=false;
  • Array(数组)
<?php
//数组定义
$arr1 = array("hello", "world", "!");
  • Object(对象)
<?php
class Car  //用class关键字声明车对象
{
    var $color;   //用var声明变量
    function __construct($color = "green")   //构造函数
    {
        $this->color = $color;  //用->进行赋值和调用函数
    }
    function what_color()
    {
        return $this->color;
    }
}
$car = new Car();  //用new创建对象
echo $car->what_color();  //调用对象的方法,输出green
  • NULL(空值)
<?php
$x = null;
var_dump($x); //NULL

PHP常量

  • const用于类成员变量,一经定义不可修改
  • define用于全局常量,不可用于类成员变量的定义,const可在类中使用,define不能。
<?php
const CONSTANT = 'Hello World';
echo CONSTANT;
define("GREETING", "Hello");
echo GREETING;

PHP字符串

  • 字符串的连接,使用“.”连接
<?php
header("Content-type:text/html;charset=utf-8");
$str1 = "hello";
$str2 = 'hello';
echo $str1 . ' ' . $str2 . "<br/>";   //hello hello
  • 字符串的长度,mb_strlen()
<?php
$str5 = "hello world!";
echo $str5 . "的长度是" . mb_strlen($str5) . "个字符" . "<br/>";  
//hello world的长度是11个字符
  • strpos()函数,用于在字符串内查找一个字符或一段指定的文本。
    如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
  • strrpos()查找指定字符在字符串中最后一次出现的位置
<?php
echo strpos("Hello world!","world");  //6
echo strrpos("Hello world!","w");  //6
  • substr()从指定位置截取字符串
<?php
$str8 = "Welcome to the king of the world!";
//从指定位置截取字符串
$str11 = substr($str8, 4, 10);   //从索引4开始截取10个
echo $str11;  //ome to the
  • strstr()按指定字符开始截取字符串直到末尾
<?php
$str8 = "Welcome to the king of the world!";
//按指定字符开始截取字符串直到末尾
$str12 = strstr($str8, "m");
echo  $str12 . "<br/>";  //me to the king of the world!
  • str_replace()替换指定字符串在字符串中
<?php
$str8 = "Welcome to the king of the world!";
//替换指定字符串在字符串中
$rep = str_replace("o", "abc", $str8);
echo $rep . "<br/>";  //Welcabcme tabc the king abcf the wabcrld!
  • trim()去除空格
<?php
$str8 = "     Welcome to the king of the world!    ";
//去除空格,如果指定字符的话就是去除指定字符从两边直到找不到指定字符
$str10 = trim($str8, 'W');
echo $str10 . "<br/>";   //elcome to the king of the world!

PHP条件语句

  • if 语句
if (条件)
{
    if 条件成立时执行的代码;
}
elseif (条件)
{
    elseif 条件成立时执行的代码;
}
else
{
    条件不成立时执行的代码;
}
  • switch语句
<?php
switch (n)
{
case 1:
    //如果 n=1,此处代码将执行;
    break;
case 2:
    //如果 n=2,此处代码将执行;
    break;
default:
//默认执行
    break;
}
?>

PHP数组

  • 数组声明
<?php
//数组定义
$arr1 = array("hello", "world", "!");
var_dump($arr1);
//声明数组时可以修改索引值
$arr3 = array(
    "lzl" => array("lzl", "18", 163),
    "sgwe" => array("sgwe", "25", 154)
);
  • implode()函数,连接数组的元素通过指定的字符
<?php
$arr = ["上官婉儿", "露娜"];
//连接数组的元素通过指定的字符
$str6 = implode("和", $arr);
echo $str6; //上官婉儿和露娜
//自动连接,就是直接连接,不加任何分隔符
$str7 = implode($arr);
echo $str7;  //上官婉儿露娜
  • explode()按指定字符将字符串分成数组
<?php
$str8 = "Welcome to the king of the world!";
//按指定字符将字符串分成数组
$str9 = explode(' ', $str8);  //按空格分割
for ($i = 0; $i < count($str9); $i++) {
    echo $str9[$i] . “ ";  //Welcome to the king of the world!
}
  • str_split()按指定长度将字符串分成数组
<?php
$str8 = "Welcome to the king of the world!";
//按指定长度将字符串分成数组
$arr1 = str_split($str8, 4);
for ($i = 0; $i < count($arr1); $i++) {
    echo $arr1[$i] . "<br/>";
}
  • foreach数组遍历
<?php
//数组定义
$arr1 = array("hello", "world", "!");
//数组遍历foreach
foreach ($arr1 as $key => $value) {
    printf("第%d个元素是%s<br/>", $key, $value);
}
//第0个元素是hello
//第1个元素是world
//第2个元素是!
foreach ($arr1 as $value) {
    printf($value . "<br/>");
}
echo "<hr>";
  • for循环遍历,使用count()函数获取数组长度
<?php
//数组定义
$arr1 = array("hello", "world", "!");
//for循环遍历
for ($i = 0, $len = count($arr1); $i < $len; $i++) {
    printf("%d号元素是%s<br/>", $i + 1, $arr1[$i]);
}
echo "<hr>";
//1号元素是hello
//2号元素是world
//3号元素是!
  • list()方法可以获取数组元素
<?php
//数组定义
$arr1 = array("hello", "world", "!");
list($a, $b, $c) = $arr1;
echo $a . $b . $c;//helloworld!
  • sort()数组排序,sort排序不保留下标,从小到大
  • rsort()排序与sort()一样但是是从大到小
<?php
//数组排序
$arr4 = array(8, 6, -95, 4545);
//sort排序不保留下标小到大
sort($arr4);
print_r($arr4);  //Array ( [0] => -95 [1] => 6 [2] => 8 [3] => 4545 ) 
//倒序排序不保留索引大到小
rsort($arr4);  //Array ( [0] => 4545 [1] => 8 [2] => 6 [3] => -95 ) 
  • asort()排序,保留索引,从小到大
<?php
//数组排序
$arr4 = array(8, 6, -95, 4545);
//asort排序保留下标小到大
asort($arr4);
print_r($arr4); // Array ( [3] => -95 [1] => 6 [2] => 8 [0] => 4545 )
  • krsort()按索引排序,按索引大到小
<?php
//数组排序
$arr4 = array(8, 6, -95, 4545);
//按键排序排序保留索引大到小
krsort($arr4);
print_r($arr4);//Array ( [3] => 4545 [2] => -95 [1] => 6 [0] => 8 )
  • shuffle()打乱数组,方法会使数组下标重排,不保留原来的下标
<?php
$arr = array(8, 5, 6, 4);
print_r($arr);
shuffle($arr);
print_r($arr);
打乱前
Array
(
    [0] => 8
    [1] => 5
    [2] => 6
    [3] => 4
)
打乱后
Array
(
    [0] => 4
    [1] => 5
    [2] => 6
    [3] => 8
)
  • reset()取得数组的第一个值,指针重置到第一个元素
<?php
$arr = array(8, 5, 6, 4);
print_r($arr);
echo reset($arr);  //8

  • end取得数组的最后一个值,指针移到最后一个元素
<?php
$arr = array(8, 5, 6, 4);
print_r($arr);
echo end($arr);  //4
  • next取得下一个元素,指针下移一次,先下移再取值
<?php
$arr4 = array(8, 6, -95, 4545);
//next取得下一个元素,指针下移一次,
$nex = next($arr4);
echo $nex . "<hr>";  //6
  • prev取得上一个元素,指针上移一次
<?php
$arr4 = array(8, 6, -95, 4545);
//prev取得上一个元素,指针上移一次
next($arr4);
$prev = prev($arr4);
echo $prev . "<hr>";  //8
  • array_push()将元素压入数组
<?php
$arr4 = array(8, 6, -95, 4545);
//压栈操作
array_push($arr4, 85, 74);
print_r($arr4);
Array
(
    [0] => 8
    [1] => 6
    [2] => -95
    [3] => 4545
    [4] => 85
    [5] => 74
)

  • array_pop()弹出数组元素
<?php
$arr4 = array(8, 6, -95, 4545);
//弹栈操作
echo array_pop($arr4) . "<hr>"; //4545
  • array_shift()从数组开头弹出元素
<?php
$arr4 = array(8, 6, -95, 4545);
echo array_shift($arr4) . "<hr>";  //8
  • array_unshift()从数组开头插入元素
<?php
$arr4 = array(8, 6, -95, 4545);
echo array_shift($arr4) . "<hr>";
array_unshift($arr4, 644);
print_r($arr4);
Array
(
    [0] => 644
    [1] => 6
    [2] => -95
    [3] => 4545
)


  • array_reverse()数组反转
<?php
$arr4 = array(8, 6, -95, 4545);
//数组反转
print_r(array_reverse($arr4));
Array
(
    [0] => 4545
    [1] => -95
    [2] => 6
    [3] => 8
)

  • in_array()判断元素存在
<?php
$arr4 = array(8, 6, -95, 4545);
//判断元素存在
var_dump(in_array(644, $arr4)); //bool(false)

PHP循环

  • while循环
while (条件)
{
    要执行的代码;
}
  • for循环
for (初始值; 条件; 增量)
{
    要执行的代码;
}
for ($i = 1; $i <= 5; $i++) {
    echo "数字为 " . $i . PHP_EOL;
}

PHP函数

简单的加法函数

function 函数名(函数参数){
	函数体
}
<?php
function add($x,$y)
{
    $total=$x+$y;
    return $total;
}

echo "1 + 16 = " . add(1,16);

PHP面向对象

  • 类的定义,类使用 class 关键字后加上类名定义。类名后的一对大括号({})内可以定义变量和方法。类的变量使用 var 来声明, 变量也可以初始化值。
<?php
//定义一个车类
class Car
{
    var $color;
    //构造函数,用来在创建对象时初始化对象, 为对象成员变量赋初始值
    function __construct($color = "green")
    {
        $this->color = $color;
    }
    function what_color()
    {
        return $this->color;
    }
}
$car = new Car();  //使用 new 运算符来实例化该类的对象
echo $car->what_color();  //使用该对象调用成员方法

  • 类的继承
//定义一个图形类
class Graphics
{
    public const PI = 3.14;  //定义一个常量
    //面积
    public function area()
    {
    }
    //构造方法
     public function __construct()
    {
    }
}
//定义一个圆形
class Circular extends Graphics    //使用extends继承父类
{
    private $radius;
    public function area()   
    //覆写父类的方法,使用->调用方法或者获取变量,使用::获取定义的常量
    {
        return  pow($this->radius, 2) * $this::PI;
    }
    public function __construct($radius = 1)   //定义构造函数
    {
    	parent::__construct();//调用父类的构造方法
        $this->radius = $radius;
    }
}
$c1 = new Circular(5);  //创建对象
echo $c1->area();  //调用对象的方法,输出78.5
  • 访问控制

    • public(公有):公有的类成员可以在任何地方被访问。
    • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
    • private(私有):私有的类成员则只能被其定义所在的类访问。
  • 接口

//使用interface关键字定义一个接口
interface UserService
{
	//定义一个查找所有用户的方法
    public function findAll();
    //定义一个查找一个用户的方法
    public function findOne($id);
}
//使用implements关键字实现接口
class UserServiceImpl implements UserService
{
	//实现接口中的方法
    public function findAll()
    {
        return "找到了所有用户";
    }
    //实现接口中的方法
    public function findOne($id)
    {
        return "找到了id为" . $id . "的用户";
    }
}
$userService = new UserServiceImpl();
echo $userService->findAll();   //找到了所有用户
echo $userService->findOne(12);  //找到了id为12的用户
  • 抽象类
//使用abstract关键字声明抽象类
abstract class User
{
    private $userName;
    private $password;
    //声明抽象方法
    abstract public function getUserName();
    abstract public function getPassword();
}
//继承抽象类
class UserImpl extends User
{
    public function __construct($userName, $password)
    {
        $this->userName = $userName;
        $this->password = $password;
    }
    //实现抽象方法
    public function getUserName()
    {
        return $this->userName;
    }
    public function getPassword()
    {
        return $this->password;
    }
}
$user = new UserImpl("上官婉儿", "123456");
echo $user->getUserName();//调用方法,输出上官婉儿
echo $user->getPassword();//调用方法,输出123456
  • static关键字
class Graphics
{
    public static $PI = 3.14;
    //面积
    public function area()
    {
    }
}
echo Graphics::$PI;  //static关键字定义的变量可以直接使用类名访问

PHP时间

<?php
date_default_timezone_set("Asia/Shanghai");//设置时区
$time = date("Y-m-d H:m:s");//格式化时间
echo $time;//2021-03-05 22:03:57

PHP文件包含

add.php:
<?php
function add($x, $y)
{
    $total = $x + $y;
    return $total;
}
hello.php:
<?php
include "./add.php";  //使用include关键字包含add函数
echo add(45, 85); //调用函数

PHP文件上传

  • 单文件上传
    文件上传的html页面
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form action="fileUpload.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="image" />
        <input type="submit" value="上传" />
    </form>
</body>

</html>

在这里插入图片描述

fileUpload.php:
<?php
header("Content-type:text/html;charset=utf-8");
//文件上传功能的封装
/**
 * @param1 array $file,需要上传的文件信息
 * @param2 array $allow_type,允许上传的MIME类型
 * @param3 string $path,存储的路径
 * @param4 string &$error,如果出现错误的原因
 * @param5 array $allow_format=array(),允许上传的文件格式
 * @param6 int $max_size=2000000,允许上传的最大值
 */
function fileUpload($file, $allow_type, $path, &$error, $allow_format = array(), $max_size = 2000000)
{
    //判断文件是否有效
    if (!is_array($file) || !isset($file['error'])) {
        //文件无效
        $error = '不是一个有效的文件';
        return false;
    }
    //判断文件存储路径是否有效
    if (!is_dir($path)) {
        //路径不存在
        $error = $path . "不是一个目录或该目录不存在!";
        return false;
    }
    switch ($error) {
        case 1:
        case 2:
            $error = "文件大小超出服务器允许大小";
            return false;
        case 3:
            $error = "文件上传过程中出现问题";
            return false;
        case 4:
            $error = "用户未选择文件上传";
            return false;
        case 6:
        case 7:
            $error = "文件保存失败";
            return false;
        default:
            break;
    }
    //判断MIME类型
    if (!empty($allow_type) && !in_array($file['type'], $allow_type)) {
        $error = "当前文件类型不允许上传,仅允许上传以下类型的文件:" . implode(",", $allow_type);
        return false;
    }
    //判断后缀是否允许
    $ext = pathinfo($file['name'])['extension'];
    if (!empty($allow_format) && !in_array($ext, $allow_format)) {
        $error = "当前文件的格式不允许上传";
        return false;
    }
    //判断大小
    if ($file['size'] > $max_size) {
        $error = "文件过大!";
        return false;
    }
    //移动到指定目录
    if (!is_uploaded_file($file['tmp_name'])) {
        $error = "文件上传错误!";
        return false;
    }
    //产生随机字符串
    $fullName = strstr($file['type'], "/", true) . date("Ymd");
    for ($i = 0; $i < 4; $i++) {
        $fullName .= chr(mt_rand(65, 90));
    }
    $fullName .= "." . $ext;
    // echo $fullName;
    if (move_uploaded_file($file['tmp_name'], $path . $fullName)) {
        return $fullName;
    } else {
        $error = "文件上传失败!";
        return false;
    }
}
//测试
$file = $_FILES['image'];
$path = "D:/PHP_files/uploads/";
if ($fileName = fileUpload($file, array(), $path, $file['error'], array(), 200000000)) {
    echo $fileName;
} else {
    echo $file['error'];
}

上传成功,返回文件名,在upload文件夹中找到该文件:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值