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.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

php中json_decode()和json_encode()

1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json

如何将文件夹里的PHP代码放到一个文件里

find ./dir -name "*.php" -exec 'cat' {} \; > dir.out

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

PHP防止SQL注入详解及防范

SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞。 一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。 对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的

PHP防止SQL注入的方法(2)

如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子: $unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')"); 这是因为用户可以输入类似VALUE”); DROP TA

PHP防止SQL注入的方法(1)

(1)mysql_real_escape_string – 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 使用方法如下: $sql = "select count(*) as ctr from users where username ='".mysql_real_escape_string($username)."' and password='". mysql_r

Linux系统安装php开发环境

Linux系统centos6.5 PHP5.6 MySQL5.6 Nginx1.7 yum安装依赖库 yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison \libtool-ltdl-devel li

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar