PHP进阶

面向对象

面向过程
面向过程是一种以“整体事件”为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数
面向对象
面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个“对象”;
对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象
类的定义
把有特点的东西集合到一起,将这些数据的形式和这些数据的操作封装到一起
对象是具有类类型的变量,是对类的实例
内部构成:成员变量(属性),成员函数(方法)
继承
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容
父类
一个类被其他类继承,可将该类称为父类,或基类,或超类。
子类
一个类继承其他类称为子类,也可称为派生类

在这里插入图片描述

类的结构

<?php
class hero{		// 定义类,类名
  var $name; 
  var $sex;		// 定义成员属性
  function jineng($var1) {	// 定义成员方法
    echo $this->name;		// 调用成员变量
    echo $var1;
    }
}
$sfj= new hero();		// 使用 new 运算符来实例化该类的对象
$sfj->name='永恩';
$sfj->id='001';
$sfj->jineng('双剑华斩')
print_r($sfj);
?>

类的修饰符

访问权限修饰符:对属性的定义

修饰符作用
public公共的,在类的内部、子部中或者类的外部都可使用,不受限制
protected受保护的,在类的内部、子类中可以使用,但能再类的外部使用
private私有的,只能在类的内部使用,在类的外部或者子类中都无法使用

在这里插入图片描述
运行后只能回显name
在这里插入图片描述
在这里插入图片描述
子类中只有私有属性不能使用

构造方法
_construct(),是一种类结构特有的特殊方法,系统已经规定好,在定义的时候只需使用即可,有了构造方法的类在实例化对象之后,对象就会自动调用

  • 目标是为了实现对象的初始化
  • 自动触发,不需要手动调用
class Saler{
    # 属性
    public $count;
    private $money;

    # 构造方法
    public function __construct($count,$money)
    {
        $this->count = $count;
        $this->money = $money;
    }
}

$s1=new saler(100,2000);
var_dump($s1);

在这里插入图片描述
析构方法
_destruct(),对象被销毁时自动调用
在这里插入图片描述
因为脚步结束系统会自动回收资源,所以这个方法用得不多

对象传值

class Saler{}

$s1 = new Saler();
$s2 = $s1; # 对象传值
var_dump($s2,$s1);

# 验证是否操控的是同一个内存地址
$s1 -> name = 'sfj';
echo $s2->name;

在这里插入图片描述
可以得出对象赋值本质是一个对象,不会增加新的对象

范围解析操作符

由类名直接访问,类名::类常量
不要乱访问属性和方法,虽然可以,属性方法最好由对象来访问
类也也有需要对数据进行操作,这时候用类来访问

class Saler{
    # 类常量
    const PI = 3.14;
}
$s1 = new Saler();
# 不能通过 $s1->PI访问,会被当成$PI报错未定义
# 使用范围解析操作符
echo Saler::PI;

# $s1::PI 也行但不建议使用

静态成员
使用static关键字修饰的类成员,表示该成员属于类访问
明确用来给类访问,而不是对象访问
受访问限定修饰符限定

class Saler{
    public $money = 0;
    public static $count = 0; # 静态属性

    # 静态方法
    public static function showclass(){
        echo Saler::$count; # 类的内部也可访问静态成员
        echo __CLASS__;
    }
    # 非静态方法
    public function showcount(){
        echo __METHOD__;
    }
}

echo Saler::$count;
# $s1 = new Saler();
# echo $s1 -> count; 这种访问会报错(动态访问不行)

# 静态方法访问
Saler::showclass();     # 访问成功
//Saler::showcount();   # 报错

类常量、静态的属性和方法是给类访问的
普通的属性和方法应该由对象访问

self关键字
在类的内部(方法里面)使用,代替类名的写法

  • 如同 $this 代表内部对象一样,在方法内部代替当前类名
  • 保障用户方便修改类名字
  • self关键字是代替类名,需要配合范围解析操作符 ::

对象克隆
clone,通过一个已有对象复制一个新的相同的对象,但两者并非同一个对象
克隆对象会自动调用魔术方法 __clone(存在的前提)在这里插入图片描述

封装数据库(连接认证)

<?php
# 通用工具类,数据变化多
class sql{
    # 设置属性:初始化信息
    public $host;
    public $port;
    public $user;
    public $psaa;
    public $dbname;
    public $charset;

    # 实现数据初始化:灵活性(允许修改)和通用性(给定默认值)
    public function __construct(array $arr = []){
        # 完成初始化
        $this->host = $arr['host'] ?? 'localhost';
        $this->user = $arr['user'] ?? 'root';
        $this->pass = $arr['pass'] ?? 'root';
        $this->charset = $arr['charset'] ?? 'utf8';
    }

    # 连接认证
    public $link;
    public $errno;
    public $error;

    public function connect(){
        $this->link = @mysqli_connect($this->host,$this->user,$this->pass);
        # 加工结果
        if(!$this->link){
            # 记录错误信息返回false
            $this->errno = mysqli_connect_errno();
            $this->error = iconv('gbk','utf-8',mysqli_connect_error());
            return false;
        }

        # 正确返回
        return true;
    }
}

$s1 = new sql();        # 使用默认数据库信息
$db = array(
    'host' => '192.168.0.1',
    'user' => 'admin',
    'pass' => 'admin',
);
$s2 = new sql($db);     # 使用外部数据库信息
var_dump($s1->connect());
echo $s1->errno,$s1->error;

在这里插入图片描述

mysqli_connect()函数:
该函数用于建立到MySQL数据库的连接
它接收5个参数:主机名、用户名、密码、数据库名和端口号
如果连接成功,则返回一个MySQLi连接资源对象,否则返回false

mysqli_connect_errno()属性:
该属性返回最近一次MySQLi连接操作的错误代码
如果没有错误发生,则返回0

mysqli_connect_error()属性:
该属性返回最近一次MySQLi连接操作的错误信息
如果没有错误发生,则返回空字符串

$errno属性:该属性用于记录MySQLi连接错误代码。
$error属性:该属性用于记录MySQLi连接错误信息

设置字符集

    # 字符集设置
    public function charset(){
        # 利用mysqli实现字符集设置
        $res = @mysqli_set_charset($this->link,$this->charset);

        # 判定结果
        if(!$res){
            $this->errno = mysqli_errno($this->link);
            $this->error = mysqli_error($this->link);
            return flase;
        }
        # 正确操作
        return true;
    }

sql执行检查

    # SQL执行检查
    public function check($sql){
        # mysqli_query执行
        $res = mysqli_query($this->link,$sql);

        # 判定错误
        if(!$res){
            $this->errno = mysqli_errno($this->link);
            $this->error = mysqli_error($this->link);
            return false;
        }
        # 成功返回结果
        return $res;
    }
$s1 -> check('select * from test');
# 因为没有test这个表,SQL语句错误

在这里插入图片描述
SQL写操作

    # 写操作
    public function write($sql){
        # 调用SQL检查方法检查和执行
        $res = $this->check($sql);

        # 根据结果判定,如果$res为true,说明执行成功,获取受影响的行数,如果为false就返回false
        return $res ? mysqli_affected_rows($this->link) : false;
    }
    # 获取自增长ID方法
    public function insert_id(){
        # 可以增加判定
        return mysqli_insert_id($this->link);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值