接口
接口可以理解为,它给出了一个或者多个由它命名的类方法/函数,这些方法是共有的,由一个或者多个类去实现它所定义(给出)的方法/函数,注意实现它的时候需要把里面所有定义的方法/函数都实现。
命名为interface
例
<?php
//创建一个接口
interface iDemo
{
//创建里面的方法/函数
public function getName();
public function getInfo();
}
如果要实现一个类,需要用到命令implements
例
<?php
//创建一个接口
interface iDemo
{
//创建里面的方法/函数
public function getName();
public function getInfo();
}
//创建一个类来实现接口里面的方法
//使用implements创建
class Demo implements iDemo
{
protected $name;
protected $info;
public function __construct($name,$info)
{
$this->name = $name;
$this->info = $info;
}
// 实现接口定义的两个方法/函数
public function getName()
{
return '我的名字叫:'.$this->name;
}
public function getInfo()
{
return '我喜欢:'.$this->info;
}
}
$obj =new Demo('李雷','韩梅梅');
echo $obj->getName();
echo '<br>';
echo $obj->getInfo();
图1
图2,接口里面的方法必须全部实现,如果有一个没实现就会报错(把第二个方法改名后,就会报错)
抽象类(可以理解为接口的另外一种表现方式)
类中某一个或者多个方法没有实现(只是声明),就可以把这个类定义为抽象类。定义为抽象类以后,它不能被实例化(不能被访问),只能当做父类,被子类继承,继承的子类需要把抽象类里面没有实现的方法全部实现。
命令abstract
例
<?php
//如果是一个抽象类,类名也需要添加abstract命令
abstract class Demo1
{
public function getName()
{
return '李雷';
}
//没有实现的方法/函数,要添加abstract转为抽象类
public abstract function getInfo();
}
//创建一个子类,继承父类
class Sub extends Demo1
{
public $name;
public $info;
function __construct($name,$info)
{
$this->name = $name;
$this->info = $info;
}
public function getName()
{
return '我是:'.$this->name;
}
//这里实现父类没有实现的方法/函数
public function getInfo()
{
echo '我喜欢:'. $this->info;
}
}
$obj = new Sub('韩梅梅','看书');
echo $obj->getName();
echo '<br>';
echo $obj->getInfo();
图
图2(如果不用子类,直接访问抽象类,会报错)
命名空间
命名空间可以理解为一台电脑,里面有个两个文件夹,两个文件夹的命名互不相干,A的文件夹里面的文件可以和B的文件夹里面的文件名字相同,例如C盘里面有A和B两个文件夹,A和B两个文件夹下面都有一个名字相同的D文件夹,他们是互相不干扰的
命名空间它只限制,或者说作用在“函数,常量,类/接口”
例
<?php
//设置一个命名空间
namespace One;
const PATH = '/article';
class Demo
{
}
//设置第二个命名空间
namespace Two;
const PATH = '/setup';
//常量PATH重名了,但是它们在两个不同的命名空间里面,所以互相不影响
echo '输出命名空间Two里面的常量PATH:'.PATH;
echo '<br>';
echo '输出命名空间One里面的常量PATH:'.\One\PATH;
图
MVC
MVC:它包括,控制器(Controller)PHP文件,模型(Model)PHP文件,视图(View)HTML文件
控制器(Controller):控制器的作用是调用模型(Model)和视图(View),将模型产生的数据传递给视图,并让视图去显示(大部分情况也有隔绝视图直接访问模型的作用)
模型(Model):最重要的是数据模型,它会把获取到的数据保存,处理过后最终返回给数据库
视图(View):主要作用是美化模型的输出结果,以及数据的采集
用MVC的概念简单创建一个表格
模型(Model)
<?php
namespace mvc;
//创建一个简单的数据
class Model
{
public function getData()
{
return [
['id' => '1', 'name' => '苹果手机', 'model' => 'Apple11', 'price' => '8000'],
['id' => '2', 'name' => '华为手机', 'model' => 'Mate30', 'price' => '5000'],
['id' => '3', 'name' => '小米手机', 'model' => 'redmi', 'price' => '2000'],
];
}
}
视图(View)
<?php
namespace mvc;
class View
{
public function fetch($data)
{
$table = '<table>';
$table.= '<caption>物品详情</caption>';
$table.= '<tr><td>ID</td><td>手机名字</td><td>型号</td><td>单价</td></tr>';
foreach($data as $good)
{
$table.= '<tr><td>'.$good['id'].'</td><td>'.$good['name'].'</td><td>'.$good['model'].'</td><td>'.$good['price'].'</td></tr>';
}
$table.='</table>';
return $table;
}
}
echo '<style type="text/css">
table {border-collapse:collapse;border:1px solid;width:400px;height:150px;text-align:center;}
caption {font-size:1.2rem;background:lightblue;border:1px solid;}
td{border:1px solid;}
</style>';
控制器(Controller)
<?php
namespace mvc;
// 这里引用的时候一定要注意,引用在命名空间的下方,不然会出现命名空间冲突
require 'Model.php';
require 'view.php';
class Controller2
{
//添加模型对象成员
private $model;
//添加视图对象成员
private $view;
//创建构造方法,传参模型实例化与视图实例化
public function __construct($model,$view)
{
$this->model = $model;
$this->view = $view;
}
public function index()
{
//获取Model数据
$data = $this->model->getData();
//获取View数据
return $this->view->fetch($data);
}
}
//实例化Model
$model = new Model;
//实例化View
$view = new View;
$controller = new Controller2($model,$view);
echo $controller->index();
// 把Model获取方式,与View获取方式,放在外部,然后传参进去。
// 如果控制器里面有多个方法/函数,可以把模型数据,与视图数据,传递给构造方法,以达到数据共享
图
学习到现在感觉离自己做出一个成品越来越近了,希望在不久的将来,自己不再是一个小白,也能自己独立开发一个小站点!!!加油加油!!!