批改状态:合格
老师批语:将一个复杂的类, 剥离公共部分进出抽象, 是常用的代码复用技术, 许多语言都是这样设计 的
1.1 对象的模板是:类; 类的模板是:接口
1.2 面向接中编程:是实现面向对象编程的三大特征(继承、封装、多态)之多态的重要手段
1.3 继承:extends; 封装:public, private, protected; 多态:接口
1.4 接口通过interface关键字声明
1.5 接口中只能声明常量和未实现的方法(只有方法体没有具体的实现),并且访问权限必须是public
1.6 接口不能进行实例化,只能通过类实现,一个类可以实现多个接口使用,隔开
1.7 一个类实现接口就必须将实现接口中声明的所有方法
1.8 语法
interface iDemo{//常量const 常量名=常量值;//只声明方法,不实现public function getName();public function aAaaa();}//创建类实现接口:implementsclass Demo1 implements iDemo{//实现iDemo接口的类必须将接口中声明的方法全部实现public function getName(){//......}public function aAaaa(){//......}}}
//创建接口:interfaceinterface iDemo{//接口方法:只声明,不实现public function getIfor();public function hello();}//创建类实现接口class Demo1 implements iDemo{//创建自有属性public $site;protected $role;//初始化自有属性public function __construct($site, $role){$this->site = $site;$this->role = $role;}//实现iDemo接口的类必须将接口中声明的方法全部实现public function getIfor(){return '我是:' .$this->site .'的讲师:' .$this->role;}public function hello(){return 'Hello, 大家好。。。';}}$obj =new Demo1('php.cn', '朱老师');echo $obj->getIfor();echo '<br>';echo $obj->hello();
1.1 使用abstract声明
1.2 不能被实例化,只能当父类被继承,通过子类来访问
1.3 抽象类可以包含普通成员,但必须包含一个抽象方法(未被实现的方法)
1.4 子类继承抽象类时,抽象类中的抽象方法必须要在子类中实现
1.5 MVC模型用到
<?php//抽象类:abstract class Demo2{//创建自有属性public $site;protected $role;public function __construct($site, $role){$this->site = $site;$this->role = $role;}//抽象方法:没有被实现,只是一个声明abstract public function getIfor();//实现public function hello(){return 'Hello, 大家新年好。。。';}}//创建子类class Sub extends Demo2{private $course;//子类中实现抽象类方法public function getIfor(){return '我是:' .$this->site .'的讲师:' .$this->role .', 教的课程是:' .$this->course;}public function __construct($site, $role, $course){parent::__construct($site, $role);$this->course = $course;}}$obj =new Sub('php.cn', '朱老师', 'JS');echo $obj->getIfor();echo '<br>';echo $obj->hello();
1.1 添加static关键字,就可以将成员定义为静态成员
1.2 在静态方法中只能访问静态成员
1.3 静态方法不允许用类实例访问,所以内部也不允许出现类实例的引用$this
1.4 访问静态成员,必须用类来访问
<?phpclass Demo3{//静态属性public static $name = '朱老师';public $salary = 10000;//静态方法public static function getName(){//静态方法不允许用类实例访问,所以内部也不允许出现类实例的引用$this//return $this->$name;return self::$name;}}//访问静态成员//必须用类来访问$obj = new Demo3();echo Demo3::$name;echo '<br>';echo $obj->getName();echo '<br>';echo Demo3::getName();
1.1 全局成员:不受作用域限制的成员—-类/接口、函数、常量
1.2 命名空间使用namespace关键字定义
1.3 命名空间必须写在第一行,之前不能有任何代码
1.4 当前空间找到,则调用的是当前空间的函数; 当前的命名空间找不到某个函数或常量时,会自动到全局的命名空间进行查找
1.5 创建全局空间:全局空间和非全局空间格式分一致
<?phpnamespace one{class A{public function getName(){return (new \A())->name;}}function a(){}//当前空间找到,则调用的是当前空间的函数function var_dump(){echo 'AAAAA';}const C = 1;echo (new A)->getName();echo '<br>';//类不会触发全局查找,函数可以//A空间中无函数var_dump//函数,常量,当前空间找不到,就到全局空间找var_dump( (new A)->getName());}namespace two {class A{}function a(){}const C = 1;//访问空间One中的A类,全局的空间使用:\echo \One\A::class;}//创建全局空间:全局空间和非全局空间格式分一至namespace{class A{public $name = 'zhu老师';}}
<?phpnamespace mvc;class Model{public function getData(){$data = [['id' => 1, 'msnv' => 'TH000004', 'name' => 'van'],['id' => 2, 'msnv' => 'TH045386', 'name' => 'sinh'],['id' => 3, 'msnv' => 'TH059660', 'name' => 'phi'],['id' => 4, 'msnv' => 'TH034876', 'name' => 'binh']];return $data;}}
<?phpnamespace mvc;class View{function fetch ($data){$table = '<table border="2">';$table .= '<caption>员工名单</caption>';$table .= '<tr><td>id</td><td>msnv</td><td>name</td></tr>';foreach ($data as $good) {$table .= '<tr>';$table .= '<td>' .$good['id'] .'</td>';$table .= '<td>' .$good['msnv'] .'</td>';$table .= '<td>' .$good['name'] .'</td>';$table .= '</tr>';}$table .= '</table>';return $table;}}
<?phpnamespace MVC;//1、加载模型类require 'Model.php';//2、加载视图类require 'View.php';//3、创建控制器class Controller{//模型对象属性private $model = '';//视图对象属性private $view = '';//构造方法,将这个构造方作为外部对象的注入点public function __construct($model, $view){$this->model = $model;$this->view = $view;}public function index(){//1、获取数据$data = $this->model->getData();//2、渲染模板return $this->view->fetch($data);}public function Update(){//.....}}//4、客户端调用$model = new Model();$view = new View();//4.1 实例化控制器类//依赖注入:注入点是构造方法,实现对外部依赖对象的共享$controller = new Controller($model, $view);echo $controller->index();

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号