面向过程 与 面向对象 的区别!
面向过程:分析出解决问题的步骤,然后再用函数把这些步骤逐一实现!
面向对象:把构成问题的事物分解成各个对象,描述事物在解决问题过程中的行为。
两者优缺点
面对过程:性能比面向对象高,适合单片机,嵌入式开发。
面向对象:易维护、易复用,易扩展。
面向对象三大特性
PHP语言面向对象有三大特性,对于其它编程语言(JAVA、PYTHON)同样适用。
封装性
将敏感数据保护起来,不被外界访问;还可以理解为,将一个功能的方方面面,封装成一个整体
通过访问权限修饰符来实现
提示:在项目中,属性基本都是私有的,通过公有的方法,对私有的属性进行赋值和取值
继承性
面向对象的继承性是指子类可以继承父类的属性和方法,并且子类可以自定义属性和方法。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
多态性
多态性是指同一个对象在不同的情形下(被实例化),表现出不同的形态。
类的封装性
<?php
//创建一个计算机类
class Cal
{
/*这个计算机的属性*/
public $first;
public $second;
//加法方法
public function add(){
printf($this->first+$this->second);
echo "<hr>";
}
}
class 是定义类的关键字,Cal是类名,首字母最好大写。
一个类主要包括属性和方法。上面的示例中包括了2个属性和1个方法。
public表示访问修饰符,意思是公开的,没有隐藏。在类的外部是可以访问这些公开的属性的方法
function是定义方法的关键字
<?php
//创建一个计算机类
class Cal
{
/*这个计算机的属性*/
public $first;
public $second;
/*构造方法*/
function __construct($first,$second)
{
$this->first = $first;
$this->second = $second;
}
//加法
public function add(){
printf($this->first+$this->second);
echo "<hr>";
}
//减法
public function sub(){
printf($this->first-$this->second);
echo "<hr>";
}
//乘法
public function mul(){
printf($this->first*$this->second);
echo "<hr>";
}
//除法
public function div(){
printf($this->first/$this->second);
echo "<hr>";
}
}
//实例化
$cal1 = new Cal();
//给属性赋值
$cal1->first=10;
$cal1->second=5;
//执行方法
$cal1->add();
$cal1->sub();
$cal1->mul();
$cal1->div();
new 是实例化对象的关键字,$cal1中保存的就是一个计算机对象,对象是具体的,是看得见摸得着的具体事物。
访问对象中的属性和方法,要使用符号->。访问属性时,属性名称的$不用添加,比如:
$cal1->first
这里的first 其是就是 Cal类的$first
构造方法和析构方法
构造方法
在类中有一个特殊的方法:构造方法
构造方法的作用:初始化成员变量(属性)
当时用new创建对象时第1个自动调用的方法,就是构造方法
可以带参数,也可以不带
一般不需要主动调用,都是自动调用的
名称固定:_construct([mixed $args[,$...]])
$this
: 表示当前对象,只有在类的方法中,当访问成员变量(属性)或自己的方法时,才会用到$this
比如:$this->name
,其中的name 实际上就是指属性$name
<?php
/**
* 学生类
*/
class Student
{
//这是学生的4个属性
private $no;
private $name;
private $sex;
private $age;
//构造方法
function __construct($no,$name,$sex,$age)
{
$this->no = $no;
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//自我介绍
public function say(){
printf("自我介绍:我叫%s,年龄:%d",$this->name,$this->age);
}
}
//实例化对象
$stu1 = new Student(1001,'张三','男',20);
$stu1->say();
析构方法
析构方法的作用就是:处理对象善后的工作。
对象销毁前自动调用的方法
不带任何参数
作用:垃圾回收工作。例:断开到MySQL的连接
名称固定:__destruct()
<?php
/**
* 学生类
*/
class Student
{
//这是学生的4个属性
private $no;
private $name;
private $sex;
private $age;
//构造方法
function __construct($no,$name,$sex,$age)
{
$this->no = $no;
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//自我介绍
public function say(){
printf("自我介绍:我叫%s,年龄:%d",$this->name,$this->age);
}
//析构方法
function __destruct()
{
echo '正在执行析构方法 ';
}
}
//实例化对象
$stu1 = new Student(1001,'张三','男',20);
$stu1->say();
对象何时销毁
网页执行完毕时,对象会自动销毁
使用unset()函数手动销毁对象
$stu1=null;
封装DB类
DB类主要实现连接数据库、查询记录、添加记录、修改记录、删除记录等功能。
首先,我们要准备MYSQL数据库,创建一个myschool数据库,创建一个student数据表
创建一个数据表
CREATE DATABASE IF NOT EXISTS `myschool` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `myschool`;
-- --------------------------------------------------------
--
-- 表的结构 `student`
--
DROP TABLE IF EXISTS `student`;
CREATE TABLE IF NOT EXISTS `student` (
`no` VARCHAR(11) NOT NULL COMMENT '学号',
`name` VARCHAR(50) NOT NULL COMMENT '姓名',
`sex` VARCHAR(2) NOT NULL COMMENT '性别',
`age` INT(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`no`)
) ENGINE=INNODB
数据的增加,更改,查询,删除
<?php
//数据库操作类,文件名db.php
class Db
{
private $conn;
//构造方法
function __construct($dbname,$usr,$pwd,$host="127.0.0.1",$port=3306,$coding='utf8')
{
//连接MySQL数据库
$conn = mysqli_connect($host,$usr,$pwd,$dbname,$port);
if(mysqli_connect_errno($conn))
{
echo "连接数据库失败:".mysqli_connect_error();
}
mysqli_set_charset($conn,$coding);
$this->conn = $conn;
echo "连接数据库成功";
}
//析构方法
function __destruct()
{
//关闭数据库连接
mysqli_close($this->conn);
echo "<br>断开数据库连接";
}
//添加
function add($table,$data){
if(!is_array($data)){
die('第二次参数必须是关联数组');
}
$fields = $values = '';
//遍历$data,构建字段列表和值列表
foreach ($data as $k=>$v){
$fields .= '`' . $k . '`,';
$values .= '"' . $v . '",';
}
//去除末尾的逗号
$fields = rtrim($fields,',');
$values = rtrim($values,',');
//构建sql指令
$sql = "insert into {$table} ($fields) values ($values)";
//输出sql指令,测试是否正确
// echo $sql;
$ret = mysqli_query($this->conn,$sql);
return $ret;
}
更改
// function update($table, $data, $where = '1=1')
// {
// if (!is_array($data)) {
// die('第二个参数必须是数组');
// }
// $values = '';
// foreach ($data as $k => $v) {
// $values .= "{$k}='{$v}',";
// }
// $values = rtrim($values, ',');
// $condition = '';
// if (is_array($where)) {
// foreach ($where as $k => $v) {
// $condition .= " {$k}='{$v}' and";
// }
// $condition = substr($condition, 0, -3);
// } else {
// $condition = $where;
// }
// $sql = "update {$table} set {$values} where {$condition}";
// $ret = mysqli_query($this->conn,$sql);
// return $ret;
// }
查询
// function getAll($table, $fields = "*", $where = '1=1')
// {
// $condition = '';
// if (is_array($where)) {
// foreach ($where as $k => $v) {
// $condition .= " {$k}='{$v}' and";
// }
// $condition = substr($condition, 0, -3);
// } else {
// $condition = $where;
// }
// $sql = "select {$fields} from {$table} where $condition";
// $ret = mysqli_query($this->conn, $sql);
// $arr = [];
// while ($row = mysqli_fetch_assoc($ret)) {
// $arr[] = $row;
//
// }
// return $arr;
// }
删除
// function delete($table,$where ='1=1')
// {
// $values = '';
// foreach ($where as $k => $v) {
// $values .= "{$k}='{$v}',";
// }
// $values = rtrim($values, ',');
// $condition = '';
// if (is_array($where)) {
// foreach ($where as $k => $v) {
// $condition .= " {$k}='{$v}' and";
// }
// $condition = substr($condition, 0, -3);
// } else {
// $condition = $where;
// }
// $sql = "delete from {$table} where ($condition)";
// $ret = mysqli_query($this->conn, $sql);
// return $ret;
//
// }
}
文件测试`
<?php
require_once "Db.class.php";
$db = new Db("myschool",'root','');
$db->add('Student',['no'=>'1001','name'=>'李四','sex'=>'男','age'=>20]);
//$db->update('Student',['name'=>'王五']);
//$db->getAll('Student',['age'=>'20']);
//$db->delete('Student','sex');