php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)
最近在学习php的过程中发现它其实比java的语言要松散很多,而且很多人说上手比较容易,但是智言我个人并不是很认同这样的观点,因为其实java的整个语法规则都非常的有条有理,虽然函数很多,但是至少经常用到的也就是那么一些,而在php中虽然函数比不上java,但是整个php的语法感觉比java要松散而混乱,所以相比来说,我认为java比php要好学一些。当然,这也有可能是我先学习了java然后再去学php的原因。
首先说说php中的三大特征,三大特征和java中是一样的,分为封装、继承、多态,同样还有另外一个学习点,就比如覆盖和重写。
覆盖和重写和java中是一样的,我这里就不多讲。
那么先讲讲封装
封装
php中的封装可以说也是和java中的封装是差不多的,只是,在php中又另外提供了一个魔术函数 __set 和 __get方法,而设计者本身也不推荐使用,我个人也还是喜欢像java中的封装,毕竟已经非常熟练了。
private $name;
private $age;
public function setName($name){
$this->name = $name;
}
public function getName(){
return $this->name;
}
public function setAge($age){
$this->age = $age;
}
public function getAge(){
return $this->age;
}
?>
然后大家就可以通过提供的公共方法来调用和赋值了。
而魔术函数 __set 和 __get方法由于创建者都不推荐,所以这里就不多说,有兴趣的朋友可以在百度里进行自行搜索,谢谢。
继承
对于继承而言其实和java中的也是差不多的。
如下:
class A{
public function method(){
echo '我是方法A';
}
}
class B extends A{
public function methodTwo(){
echo '我是方法B';
}
}
$b = new B();
$b->method();
$b->methodTwo();
?>
继承需要注意几点:
子类最多只能继承一个父类(指直接继承);
子类可以继承其父类(或者超类)的public、protected修饰的变量(属性)和函数(方法);
在创建某个子类对象时,默认情况下会自动调用其父类的构造函数。
如果在子类中需要访问其父类的方法(构造方法/成员方法 方法的访问修饰符是public/protected),可以使用父类::方法名(或者parent::方法名)来完成。
如果子类(派生类)中的方法和父类(基类)方法相同,我们称为方法重写/方法覆盖。
当然了,因为目前更新版本的问题,我所学的版本是5.3的版本,所以在最新的版本中智言还没有去研究,所以还会继续去看看研究的。
多态
至于多态,那就基本上和java中是不一样的啦,因为在java中,多态是这样写的。
class ZhiYan{
void method(){
System.out.println("我是方法一");
}
void method(int a){
System.out.println("我是方法二");
}
void method(int a,int b){
System.out.println("我是方法三");
}
}
ZhiYan zhiyan = new ZhiYan();
zhiyan.method();
zhiyan.method(5);
那么在java中会根据你传递的参数在自动选择需要匹配的方法,而在php中是不支持这样的方法,不知道php7中会不会有所改动…
php中依然要用到魔术方法 __call ,那么是这样写的:
class Reload{
public function test1($a){
echo "test1..";
}
public function test2($a,$b){
echo "text2---".$a.$b;
}
//这里提供一个魔术函数 __call
public function __call($method,$a){
if($method=="test"){
if(count($a)==1){
$this->test1($a);
}else if(count($a)==2){
$this->test2($a);
}
}else{
echo '没有匹配到你需要的方法';
}
}
}
$load = new Reload();
$load->test(1);
?>
所以在学习php过程中,如果你没有编程基础,我想会更容易上手吧,至少不会混乱,而如果学习过其他语言,你的优势更多的将是你上手会很快,而你学到后面,有时候总结不到位,会学的混乱一些。
php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)相关推荐
- python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)
面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...
- 面向对象 编程及面向对象三大属性:封装 继承 多态
面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...
- Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态
Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...
- Java中面向对象的三大特征之一——继承
继承 1.继承是类和类之间的一种关系java中的类和类之间的关系有很多中,继承只是其中一种,其他的还有依赖.组合.聚合等2.继承关系的俩个类,一个是子类,一个是父类子类也可以称为派生类,父类也可以称为 ...
- 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?
面向对象的三大核心特性简介 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率. 该开发模式之所以使程序设计更加完善和强大,主要是因为面向对象具有 ...
- 三大特征 封装 继承 多态
''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...
- 面向对象的三大特征:封装 继承 多态
封装: 封装的概念: 代码的整合, 封装的层次: 函数的封装: 把一组操作整合在一起 类的封装: 把属性和方法整合在一起 结构的封装:根据操作的性质(模型/控制操作/交互视图)进行结构设计封装 ...
最新文章
- 视频直播常见问题与解决办法汇总【系列二—直播截图】
- Android JNI 第三篇 Java参数类型与本地参数类型对照
- Xamarin Anroid App访问网站失败
- C语言和C++中的struct 和typedef struct
- iOS开发之普通网络异步请求与文件下载方法
- 调用某个按钮事件_Event 对象之事件句柄 (Event Handlers)
- 光耦驱动单向可控硅_光耦继电器在实际应用中的作用以及工作原理!!
- PostGIS mysql_fdw安装(Linux)
- 二值图像中封闭孔洞的高效填充算法(附源码)。
- 第七章7.8示例学习:统计每个字母出现的次数
- pythoninterp error_从Python Interp运行时获取“importterror:尝试使用未知父包进行相对导入”...
- 如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
- 使用nginx反向代理解决前端跨域问题
- ubuntu php加载不了gd,ubuntu 中php不支持gd库的freetype,导致页面验证码无法加载
- 信息学奥赛一本通1142:单词的长度
- 初次使用Chloe(本人小白)
- Android Retrofit的学习
- 关于身份证号或者手机号,密码 隐藏中间几位数字
- 们指点如果在android平台下开启jbox2d的debugDraw功能
- 7.Unity2D 横版 未受伤害时,血条缓慢变透明+伤害数值显示(浮动,大小,颜色)+协程的应用
热门文章
- python global和nonlocal用法解析
- Python实现im2col和col2im函数
- python教程:sum(1-2+3-4+...+99)
- python的if not用法
- Python类的约束以及super()剖析
- jmeter线程说明_4.centos下Jmeter+InfluxDB+Grafana环境的搭建1
- web.xml隐藏html,web.xml
- linux ksh 历史命令,防止Linux中的bash(和ksh)历史记录更改
- VS cmake远程调试ubuntu项目生成报错:“Does not match the generator used previously: Ninja“(删除.vs隐藏文件夹)
- 连接wifi的主机设置静态ip(固定ip)后无法上网的原因