php之抽象类

2024-06-08 08:48
文章标签 php 抽象类

本文主要是介绍php之抽象类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 定义
  • 引出概念
    • 第一代
    • 第二代
    • 第三代
  • 抽象类不能实例化那要抽象类干什么
  • 抽象类使用场景
    • 面向对象编程能添加就不要修改

定义

抽象类: 无法实例化
类前加 abstract, 此类就成为抽象类,无法实例化.

引出概念

春秋战国时期,燕零七 飞行器专家,能工巧匠.

他写了一份图纸—飞行器制造术

飞行器秘制图谱
1: 要有一个有力的发动机,喷气式.
2: 要有一个平衡舵,掌握平衡

他的孙子问: 发动机怎么造呢?
燕零七眼望夕阳: 我是造不出来,但我相信后代有人造出来


燕零七的构想,当时的科技造不出来,即这个类只能在图纸化,无法实例化.
此时这个类没有具体的方法去实现,还太抽象,因此我们把他做成一个抽象类。
代码

第一代

abstract class FlyIdea {// 大力引擎,当时也没法做,这个方法也实现不了// 因此方法也是抽象的public abstract function engine();// 平衡舵public abstract function blance();/*注意:抽象方法 不能有方法体下面这样写是错误的public abstract function blance() {}Fatal error: Abstract function FlyIdea::engine() cannot contain body*/
}//  抽象类不能 new 来实例化
//  下面这行是错误的
//  $kongke = new FlyIdea();
//  Cannot instantiate abstract class FlyIdea

第二代

到了明朝,万户用火箭解决了发动机的问题

abstract class Rocket extends FlyIdea {// 万户把engine方法,给实现了,不再抽象了public function engine() {echo '点燃火药,失去平衡,嘭!<br />';}// 但是万户实现不了平衡舵,// 因此平衡舵对于Rocket类来说,// 还是抽象的,// 类也是抽象的
}

第三代

到了现代,燕十八亲自制作飞行器
这个Fly类中,所以抽象方法,都已经实现了,不再是梦想.

class Fly extends Rocket{public function engine() {echo '有力一扔<br />';}public function blance() {echo '两个纸翼保持平衡~~~';}public function start() {$this->engine();for($i=0;$i<10;$i++) {$this->blance();echo '平稳飞行<br />';}}
}
$apache = new Fly();
$apache->start();

抽象类不能实例化,那要抽象类干什么?

abstract class Car {public function run() {echo '滴滴';}
}
class qq extends Car {
}
$qq = new qq();
//虽然不能直接实例化,但是我们可以先继承,然后再实例化

抽象类使用场景

请看如下场景:
Facebook 多国语言欢迎页面user登陆,有一个 c 字段,是其国家
当各国人登陆时,看到各国语言的欢迎界面我们可以用面向过程的来做if($c == 'china') {echo '你好,非死不可';
} else if($c =='english') {echo 'hi,welcome';
} else if($c == 'japan') {echo '搜达斯内';
}反思: 当facebook进入泰国市场时,
增加 else if ,扩展性很差$c = 'english';if($c == 'china') {echo '你好,非死不可';
} else if($c =='english') {echo 'hi,welcome';
} else if($c == 'japan') {echo '搜达斯内';
}***/// =====用面向对象来做======//
/*
让美国小组/中国开发组/斯蜜达开发组 来开发Welcome类争执不下: echo 到底该中? 日? 韩?说: 干脆在wel()方法里,判断一下? 没意义啊*/abstract class Welcome {public abstract function wel();
}// 这是首页的controller开发者
//$wel = new Welcome();
//$wel->wel();
/*
说:你们别争执了,我只知道,我要调用wel()方法,就是打招呼,
你们显示什么语言和我无关.
*//**
经理说话:
Welcome谁也不许动,各国开发小组开发自己的招呼类另:为了首页的controller开发者便于调用,
统一继承自welcome类
**/class china extends Welcome {public function wel() {echo '你好,非死不可,<br />';}
}class english extends Welcome {public function wel() {echo 'hi,welcome';}
}class japan extends Welcome {public function wel() {echo '搜达斯奈';}
}// 再看首页开发者$c = 'english'; // china, japan
$wel = new $c();
$wel->wel();/*以后新增了泰国语,首页的开发者,根本无需改动
只需要增加一个泰国的welcome类 就可以了.所以有一些面向对象的介绍中,说面向对象的一个特点:可插拔特性

面向对象编程,能添加就不要修改

这篇关于php之抽象类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041708

相关文章

PHP的基本语法有哪些?

PHP的基本语法包括以下几个方面: PHP标记:PHP脚本以<?php开始,以?>结束。这是PHP文件的默认文件扩展名是.php。 变量和常量:变量以$符号开头,其后是变量的名称。常量使用define()函数定义,例如define("常量名", 常量值);。 数据类型:PHP支持多种数据类型,如整型、浮点型、字符串型等。 注释:PHP支持单行注释(用//表示)和多行注释(用/* */表示

php json_encode 大括号中括号

当array是一个从0开始的连续数组时,json_encode出来的结果是一个由[]括起来的字符串。 而当array是不从0开始或者不连续的数组时,json_encode出来的结果是一个由{}括起来的key-value模式的字符串。 当字符串为[1,1,1] 这种模式时,json_decode默认解析出来的结果是一个数组。 当字符串为{"1":1,"2":1} 这种模式时,json_

PHP序列化用到的构造:__sleep() __wakeup()

串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.   当一个对象被串行化,PHP会

PHP生成csv格式Excel,秒级别实现excel导出功能

防止报超内存,兼容中文,兼容科学技术法。 爽。。。。很爽。。。。 /*** 告诉浏览器下载csv文件* @param string $filename*/public static function downloadCsv($data, $filename, $encoding = 'utf-8'){header("Content-type: text/csv");header("Conten

PHP 读取或生成大的Excel

场景,在很多情况下,需要读取Excel文件。 常用的有PHPExcel包或者使用 maatwebsite/excel 包 但是使用这个包读取或生成excel,如果excel文件过大,很容易出现超内存情况。 解决方法: 上传:要求上传者使用.csv 文件上传。然后使用php自带的 fgetcsv()函数来读取文件。http://php.net/manual/zh/function.fgetc

文件权限修改为777,php failed to open stream: Permission denied

记录一次在谷歌云上的异常诡异的事件: 环境 centos7.5 nginx php7.0 mysql 问题: 问题一 我用相同的nginx配置,只是修改了nginx root目录。 打开/var/www/html/ 这个目录就报 2018/06/22 04:35:03 [error] 15840#0: *438 FastCGI sent in stderr: “Primary scr

PHP ODBC:连接数据库的桥梁

PHP ODBC:连接数据库的桥梁 PHP ODBC(Open Database Connectivity)是一个允许PHP应用程序连接到各种数据库管理系统的扩展。它为PHP提供了一个标准的数据库访问接口,使得开发者可以编写不依赖于特定数据库系统的代码。本文将详细介绍PHP ODBC的概念、工作原理、使用方法以及在实际开发中的应用。 什么是PHP ODBC? PHP ODBC扩展使得PHP能

在抽象类中使用@Autowired

1.简介 在本快速教程中,我们将说明如何在抽象类中使用 @Autowired 自动装配注解。 我们将 @Autowired 应用于 abstract 抽象类,并关注此时要考虑的重点。 2.Setter 方式注入 我们可以在设置方法上使用_@Autowired_: public abstract class BallService {private LogRepository logRep

抽象类和接口之间的关系

1。类可以实现多个接口而只能继承一个超类。 2。抽象类可以有非抽象方法而接口的方法只能都是抽象的。 3。抽象类可以定义和使用变量而接口则不可以。 4。抽象类中的方法可以有各种不同的修饰符,而接口中的方法默认都是public,不允许字面定修饰符。 一个接口中的成员函数可以在不同的类中安装,而它的成员函数可以有很多种的实现方法,但是抽象类却不能象这样,它必须是由子类来继承,然后由子类来实现它的

php 成员变量赋值用连接符报错

今天遇到一个问题,对类中的一个成员变量赋值,一直报错。就是一个常量连接一个字符串 class FileUploadController extends Controller{private $path = BASEDIR."/Public/Upload"; //上传文件保存你路径private $allowType = array('jpg','png','gif');