php面向对象
李 书 明
主要从事PHP相关课程、前端课程的培训
展开
-
《PHP面向对象》第41课:接口
接口定义了实现某种服务的一般规范,声明了所需的函数和常量,但不指定如何实现。我们这里说的接口,不是指api接口,而是面向对象中的接口interfaceapi接口:英文全称Application Programming Interface,翻译为“应用程序编程接口”。是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制...原创 2019-10-08 08:59:15 · 260 阅读 · 0 评论 -
《php面向对象》第30课 封装复杂的MVC-核心文件fastphp-错误报告
在fastphp文件中的run()方法中有这样一行代码$this->setReporting();下面我们来看一下setReporting()方法 // 错误处理报告 public function setReporting() { if (APP_DEBUG === true) { error_reporting...原创 2019-09-01 14:04:35 · 205 阅读 · 0 评论 -
《php面向对象》第29课 封装复杂的MVC-核心文件fastphp-自动加载
我们的MVC框架的入口文件中index.php中有样几行代码// 加载框架文件require(__DIR__ . '/../fastphp/Fastphp.php');// 实例化框架类(new fastphp\Fastphp($config))->run();fastphp.php是我们mvc框架的核心文件,通过以下的代码片断,我们了解一下它主要完成的功能cl...原创 2019-09-01 11:21:25 · 508 阅读 · 0 评论 -
《php面向对象》第28课:封装复杂的MVC-配置文件
配置文件主要存放连接数据库地址、用户、密码、数据库等相关信息。为什么要把这些写到配置文件中呢?配置文件存放在哪里,主要看项目的需要和自己的喜好。我们在index.php入口文件中,能正确引入配置文件就可以了。<?php//配置文件return [ 'db' => [ 'host' => 'localhost', 'use...原创 2019-09-01 10:00:16 · 353 阅读 · 0 评论 -
《php面向对象》第27课:封装复杂的MVC-单一入口文件
下面我们说一下MVC结构的另一个特点:单一入口单一入口指在一个网站(应用程序)中,所有的请求都是指向一个脚本文件的,例如thinkphp中的http:\\localhost\index.php,所有对应用程序的访问都是必须通过这个入口,正是单一入口才使得MVC模式得以实现,因为当你访问index.php的时候,应用程序会做大量的初始化工作,调用大量的基础类库,并根据index.php后面的参数...原创 2019-09-01 09:11:33 · 463 阅读 · 0 评论 -
《php面向对象》第26课:MVC框架的基本结构
上节课我们提到,现成的MVC框架有很多,最具有代表性的有thinkphp,YII ,为什么开要自己开发一个呢?一个成熟的MVC框架需要10人以上的团队至少开发一年以上,我们开发的MVC框架只能是mini型。这样做的目的:深入学习面向对象编程和MVC设计模式下面我们设计一个最简单的MVC结构,用实际代码来表示模型、视图、控制器三者之间的关系 。我们创建了四个php文件:外层目...原创 2019-08-30 09:18:06 · 391 阅读 · 0 评论 -
《php面向对象》第25课:MVC介绍
首先我们要学习什么是MVC?MVC是软件工程中的一种设计模式。它的全称是model view controller,是模型、视图、控制器的缩写。用这种方法组织代码,可以将业务逻辑、数据、界面相分离。当我们需要更换用户界面时,不需要重新编写业务逻辑。现在的软件软件项目开发,基本都是MVC的结构。为了提高软件开发效率,一些公司、团队开发了一些MVC的框架。最具有代表性的有:tinkphp,...原创 2019-08-29 19:45:47 · 226 阅读 · 0 评论 -
《php面向对象》第24课:巩固与练习
前面几节课,我们学习了继承和多态。为了让同学们更好的理解,使用的案例都来自生活,在实际项目的开发中,不会使用这些案例。在项目开发中,使用面向象编程,封装的类更加抽象,各个类之间关系也更加复杂。对于我们初学者来说,掌握面向对象中基本的原则和正确的语法是非常重要的。下面有几点必须要弄清楚:为什么要使用继承 抽象方法的特点是什么 抽象类有哪些特点 继承抽象类时需要注意什么 重写(覆盖...原创 2019-08-29 17:30:40 · 238 阅读 · 0 评论 -
《php面向对象》第23课:多态-覆盖
多态不但表现在抽象方法上,普通的方法同样可以实现多态。下面我们看一个例子。<?php//顾客类class Customer{ public $name; //姓名 //购买商品 public function buy() { echo '按原价购买物品'; }}//vip类class Vip extends ...原创 2019-08-29 16:59:50 · 398 阅读 · 0 评论 -
《php面向对象》第31课 封装复杂的MVC-核心文件fastphp-路由处理
访问我们构建的mvc结构的网站时,我们的请求一般是这样的:http://localhost/index.php/index/list其中index.php后面紧跟的是控制器index和方法list,程序最终要实例化index控制器类,执行list方法。如何从上面的url请求中取出控制器和方法,就是接下来我们要做的事情。 // 路由处理 public func...原创 2019-09-01 17:13:09 · 367 阅读 · 0 评论 -
《php面向对象》第32课 封装复杂的MVC-最基本的控制器和视图类
在MVC结构中,控制器类有核心的控制器类和用户自定义的控制器类,分别存放在fastphp目录和app目录中。用户自定义的控制器类必须继承核心的控制器类。下面就来看一下核心控制器类核心控制器类所在位置:参考代码如下 :<?phpnamespace fastphp\base;//控制器类class Controller{ protected $_con...原创 2019-09-02 10:55:29 · 204 阅读 · 0 评论 -
《php面向对象》第40课:使用MVC-小试牛刀
前面我们学习了如何封装复杂的MVC,并且也做了简单的测试,接下来开发一个简单的项目,看看我们封装的MVC还有什么问题。如果你还没有完整的MVC框架,在这里可以下载:https://download.csdn.net/download/lsmxx/11659477我们练习的项目非常简单,主要实现以下功能:显示学生列表,可以添加学生、修改学生信息和删除学生运行的页面如下:学生列...原创 2019-09-09 17:38:31 · 149 阅读 · 0 评论 -
《php面向对象》第39课:封装复杂的MVC-数据库操作-封装和使用model类
前面我们学习的db类和sql类都属于模型的范畴,接下来我们要封装和使用model类model类所有位置model类的代码非常简单<?phpnamespace fastphp\base;use fastphp\db\Sql;class Model extends Sql{ public function __construct($table) {...原创 2019-09-03 16:59:40 · 239 阅读 · 0 评论 -
《php面向对象》第38课:封装复杂的MVC-数据库操作-封装sql类-巩固练习
通过前面四次课的学习,我们对于pdo的操作以及现有的数据库操作类有了一定的认识,学会了如何实现查询数据,如何添加记录,如何实现链式操作,接下来请同学们自己完成数据的更新和删除操作提示:这两个方法名分别是: update()和 delete()最后写出完整的数据库操作类录制视频讲解自己封装的类,需要写一些测试程序,验证自己的代码。...原创 2019-09-03 15:48:07 · 119 阅读 · 0 评论 -
《php面向对象》第37课:封装复杂的MVC-数据库操作-封装sql类-add方法
为了避免sql的非法注入,我们在新增、修改记录时使用pdo的预处理,然后进行绑定参数。在上节课封装的sql类中添加以下代码: /** * 新增数据 * @param $data ,数据格式:['no'=>101,'name'=>'zhangsan'] * @return int 返回影响的行数 */ public functio...原创 2019-09-03 15:36:33 · 283 阅读 · 0 评论 -
《php面向对象》第36课:封装复杂的MVC-数据库操作-封装sql类-链式操作
数据库的大部分操作都是在sql类中实现的。本节课我们主要学习什么是链式操作链式操作主要体现在数据查询上,这里数据查询有两个方法:fetchAll() 和 fetch()我们先看代码<?phpnamespace fastphp\db;use fastphp\db\Db;use \PDOStatement;class Sql{ // 数据库表名...原创 2019-09-03 14:56:06 · 222 阅读 · 0 评论 -
《php面向对象》第35课:封装复杂的MVC-数据库操作-封装db类
DB类主要功能:使用pdo连接数据库,其它要实现的功能在sql类中实现。下面是db.php的参考代码<?phpnamespace fastphp\db;use PDO;use PDOException;class Db{ private static $pdo = null; private function __construct() ...原创 2019-09-03 08:55:28 · 234 阅读 · 0 评论 -
《php面向对象》第33课 封装复杂的MVC-用户定义的控制器和视图
用户定义的控制器和视图是根据实际项目的需求,所以理解起来更明白些。根据约定,这些文件必须存放在app目录下<?phpnamespace app\controllers;use fastphp\base\Controller;class IndexController extends Controller{ public function index(){...原创 2019-09-02 11:43:02 · 379 阅读 · 0 评论 -
《php面向对象》第22课:多态-抽象类
在这次课,我们要掌握两个概念:抽象类,多态。二者之间有着紧密的联系。多态:不同的对象对于同一行为表现出不同的形态。比如:动物都有进食的行为,老虎和蛇都属于动物,但进食的方式却不一样。老虎:撕咬食物蛇:直接吞咽那么,如何表达老虎、蛇、动物之间的关系呢<?php//抽象类abstract class Animal{ //抽象方法 abstrac...原创 2019-08-29 16:14:31 · 691 阅读 · 0 评论 -
《php面向对象》 第21课:继承-protected
类中的访问修饰符,限定了类中成员的可访问范围。前面我们学习了public和private。回顾一下:public:公开的,在类的内部、外部,都可以访问被public修饰的成员(属性和方法) private:私有,只能在类的内部可以访问。今天我们要学习的是protected:受保护的。父类中被protected修饰的成员,只有在类内部以及继承类中使用,类外部不能使用。<...原创 2019-08-28 17:25:50 · 725 阅读 · 0 评论 -
《php面向对象》 第20课:继承-构造方法
构造方法是用来初始化成员变量的,当我们实例化对象时,会自动执行构造方法。那么当使用继承时,在构造方法方面我们应该注意什么呢?注意:在PHP的继承中,构造方法有很多的坑,需要我们去发现。我们改造上节课中的代码,还是汽车,卡车,公交车,我们把构造方法添加上。<?php/** * 汽车类 */class Car{ public $wheel; //汽车轮子...原创 2019-08-28 16:14:26 · 598 阅读 · 0 评论 -
《php面向对象》 第9课:封装DB类-4
接下来我们要封装的就是查询方法getAll,该方法主要实现构建select指令,最终返回二维数组。 /** * 查询记录 * @param $table 表名 * @param array $where 查询条件,可以是字符串,也可以是数组 * @param string $fields 查询字段 * 返回二维数组 */ ...原创 2019-08-27 11:42:17 · 254 阅读 · 0 评论 -
《php面向对象》 第8课:封装DB类-3
更新记录的sql指令:UPDATE `student` SET `name`='李四',`age`=21 WHERE `no`='1831001'在db类中,更新记录的方法update,最终要实现的是将传递过来的数据构建成以上的sql指令。以下是db类中的update方法 /** * 更新记录 * @param $table 表名 * @par...原创 2019-08-27 10:53:52 · 578 阅读 · 0 评论 -
《php面向对象》 第7课:封装DB类-2
在db类中除了完成数据库连接和关闭外,剩下的就是实现数据的增删改查了。接下来,我们要完成的就是数据的增加。1、必须会书写添加记录的sql指令INSERT INTO `student`(`no`, `name`, `sex`, `age`) VALUES ('183001','张三','男',20)2、我们在类中需要定义一个方法add,来完成记录的添加。该方法主要实现:将调用者传递...原创 2019-08-27 09:47:36 · 430 阅读 · 0 评论 -
《php面向对象》 第6课:封装DB类 -1
项目开发过程中离不开数据库的操作,非常有必要封装一个DB类。DB类主要实现连接数据库、查询记录、添加记录、修改记录、删除记录等功能。首先,我们要准备MYSQL数据库,创建一个myschool数据库,创建一个student数据表---- Database: `myschool`--CREATE DATABASE IF NOT EXISTS `myschool` DEFAULT CHA...原创 2019-08-26 17:27:55 · 834 阅读 · 0 评论 -
《php面向对象》 第5课:巩固与练习
通过前面4节课的学习,我们基本了解了PHP面向对象的相关概念,也学会了如何封装一个类,为了更好地巩固学习成果,给各位同学提出以下要求。会描述面向过程和面向对象的区别 会背诵面向对象的三大特征 编写程序,用面向对象的思想实现一个计算器类 提示:类的名称:cal 两个属性分别存放两个操作数,可以私有,也可以公开 一个构造方法,主要初始化两个操作数 四个方法:分别为add(...原创 2019-08-26 15:57:59 · 347 阅读 · 0 评论 -
《php面向对象》 第2课:面向对象三大特性
PHP语言面向对象有三大特性,对于其它编程语言(JAVA、PYTHON)同样适用。下面就来描述一下面向对象的三大特性:封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来...原创 2019-08-26 10:24:57 · 405 阅读 · 0 评论 -
《php面向对象》 第3课:类的封装
在学习PHP面向对象之前,必须有PHP的基础知识,并且会部署PHP项目(代码)到web服务器,会运行PHP文件。PHP面向对象的所有代码都是基于PHP7编写的,大部分代码也适用于PHP5.6。所以你要使用这些代码的话,最好将PHP的版本调整为PHP5.6以上。下面我们拿一个最简单的例子来说明类的封装。把学生封装一个类,是我们常用的例子。所有的学生有共同的属性和行为,比如,学生有学号,性...原创 2019-08-26 11:10:11 · 463 阅读 · 0 评论 -
《php面向对象》 第4课:构造方法和析构方法
在类中有一个特殊的方法:构造方法构造方法的作用:初始化成员变量(属性)看下面的代码<?php/** * 学生类 */class Student{ //这是学生的4个属性 private $no; private $name; private $sex; private $age; //构造方法 functi...原创 2019-08-26 14:33:54 · 538 阅读 · 0 评论 -
《php面向对象》 第10课:封装DB类-总结
前面几节课,我们简单的封装了DB类,目的是练习类的封装。我们封装的DB类,功能非常简单,也要许多考虑不周之处,在实际项目中,还需要添加很多功能。<?php/** * 数据库操作类,文件名:Db.class.php */class Db{ private $conn; //保存数据库连接资源 //构造方法:主要实现数据库连接,设置编码格式,并把数据库连...原创 2019-08-27 11:49:16 · 424 阅读 · 0 评论 -
《php面向对象》 第11课:巩固与练习
本节课我们主要巩固前面所学内容,有几个问题需要考虑:方法名称前面没有访问修饰符,该方法是公开的还是私有的? 封装类时,哪些属性必须要写? 类中的方法如何访问属性? 每位学生写一篇博客,归纳总结前面所学内容。 上机练习:重新封装db类,功能和算法要和现在学习的有差异 封装完db类后,自己录制视频,讲解自己的db类,它的独特之处在哪儿?...原创 2019-08-27 14:00:47 · 225 阅读 · 0 评论 -
《php面向对象》 第19课:继承-简单语法
面向对象的第二大特性:继承继承让我们摆脱重复的代码,让我们的功能得以扩展。如何理解继承呢?就拿汽车来举例子吧。汽车可以分为公交车、卡车、小轿车等,它们之间存在一定的关系。公交车、卡车、属于汽车。我们可以用代码来实现这些事物。<?php/** * 汽车类 */class Car{ public $wheel; //汽车轮子 public fu...原创 2019-08-28 15:34:50 · 500 阅读 · 0 评论 -
《php面向对象》 第18课:巩固与练习
前面几课,我们学会了静态成员、单例模式、自动加载机制,这些都是PHP面向对象必须要掌握的。需要牢记的有以下几点:静态成员在类的内部如何访问,在类的外部如何访问 单例模式的特点是什么 单位模式的代码需要实现哪些功能 自动加载机制什么时候会执行任务布置:写一篇博客,总结前面所学内容 改写原来db类,使用单例模式和自动加载机制实现。 录制视频,讲解自己的代码。学习面向对象,除了...原创 2019-08-28 14:41:29 · 273 阅读 · 0 评论 -
《php面向对象》 第17课:spl_autoload_register取代__autoload
在上次课中,我们学习了__autoload函数。__autoload() 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。同样,我们还是准备...原创 2019-08-28 14:34:55 · 480 阅读 · 0 评论 -
《php面向对象》 第16课:魔术方法之autoload
在封装类时,可以使用很多魔术方法。PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),前面课程中我们学习的构造方法__construct,析构方法 __destruct,就是其中的两个魔术方法。以下是PHP所有的魔术方法,我们了解一下。魔术方法包括:__construct(),类的构造函数 __destruct(),类的析构函数 __call()...原创 2019-08-28 14:18:34 · 480 阅读 · 0 评论 -
《php面向对象》 第15课:命名空间
命名空间是在php5.3版本以加入的。命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。比如,我们创建一个文件:student....原创 2019-08-28 11:41:15 · 278 阅读 · 0 评论 -
《php面向对象》 第14课: 对象之间赋值与clone
对象之间的赋值和普通变量的赋值是有区别的,先看例子。<?phpclass Student{ public $name;}$s1 = new Student();$s1->name = '张三';//对象之间赋值$s2 = $s1;$s2->name = '李四';echo $s1->name;echo '<br>';ec...原创 2019-08-28 10:42:05 · 290 阅读 · 0 评论 -
《php面向对象》 第13课:单例模式
单例模式,就是指一个类只有一个对象实例。这样做的好处,可以防止频繁创建对象而造成资源浪费。设计单例模式,需要注意以下几点:一个类只能有一个对象; 必须是自行创建这个类的对象; 要向整个系统提供这一个对象;封装单例模式的类时,需做到以点几点:只提供私有的构造函数, 含有一个该类的静态私有对象, 提供一个静态的公有的函数用于创建或获取它本身的静态私有对象。 有一个private...原创 2019-08-28 09:48:22 · 502 阅读 · 0 评论 -
《php面向对象》 第12课:静态成员
在类中除了有普通的成员(普通的属性和普通的方法),还有静态的成员(静态属性和静态方法)先看下面的代码:<?phpclass Book{ //使用static关键字声明成员是静态的 private static $sum = 0; public function showme() { //访问静态成员,必须使用self关键字和...原创 2019-08-28 09:10:52 · 371 阅读 · 0 评论 -
《php面向对象》 第1课:面向过程与面向对象的区别
PHP编程语言属于脚本语言,在学习PHP基础知识时,基本上都是按面向过程写代码,学习PHP中级时要学习面向对象的方式写代码。那么,面向过程与面向对象有什么区别呢?面向过程就是分析出解决问题所需要的步骤,然后再用函数把这些步骤逐一实现。面向对象就是把构成问题的事物分解成各个对象,建立对象的目的并不是为了完成某一个步骤,而是为了描述了某个事物在解决问题过程中的行为。举个例子来说明一下两...原创 2019-08-26 09:42:49 · 482 阅读 · 0 评论