最近在学习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中面向对象的三大特征(封装/继承/多态)相关推荐

  1. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  2. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  3. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  4. 面向对象 编程及面向对象三大属性:封装 继承 多态

    面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...

  5. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  6. Java中面向对象的三大特征之一——继承

    继承 1.继承是类和类之间的一种关系java中的类和类之间的关系有很多中,继承只是其中一种,其他的还有依赖.组合.聚合等2.继承关系的俩个类,一个是子类,一个是父类子类也可以称为派生类,父类也可以称为 ...

  7. 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?

    面向对象的三大核心特性简介 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率. 该开发模式之所以使程序设计更加完善和强大,主要是因为面向对象具有 ...

  8. 三大特征 封装 继承 多态

    ''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...

  9. 面向对象的三大特征:封装 继承 多态

    封装: 封装的概念: 代码的整合, 封装的层次: 函数的封装: 把一组操作整合在一起 类的封装: 把属性和方法整合在一起 结构的封装:根据操作的性质(模型/控制操作/交互视图)进行结构设计封装 ...

最新文章

  1. 视频直播常见问题与解决办法汇总【系列二—直播截图】
  2. Android JNI 第三篇 Java参数类型与本地参数类型对照
  3. Xamarin Anroid App访问网站失败
  4. C语言和C++中的struct 和typedef struct
  5. iOS开发之普通网络异步请求与文件下载方法
  6. 调用某个按钮事件_Event 对象之事件句柄 (Event Handlers)
  7. 光耦驱动单向可控硅_光耦继电器在实际应用中的作用以及工作原理!!
  8. PostGIS mysql_fdw安装(Linux)
  9. 二值图像中封闭孔洞的高效填充算法(附源码)。
  10. 第七章7.8示例学习:统计每个字母出现的次数
  11. pythoninterp error_从Python Interp运行时获取“importterror:尝试使用未知父包进行相对导入”...
  12. 如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
  13. 使用nginx反向代理解决前端跨域问题
  14. ubuntu php加载不了gd,ubuntu 中php不支持gd库的freetype,导致页面验证码无法加载
  15. 信息学奥赛一本通1142:单词的长度
  16. 初次使用Chloe(本人小白)
  17. Android Retrofit的学习
  18. 关于身份证号或者手机号,密码 隐藏中间几位数字
  19. 们指点如果在android平台下开启jbox2d的debugDraw功能
  20. 7.Unity2D 横版 未受伤害时,血条缓慢变透明+伤害数值显示(浮动,大小,颜色)+协程的应用

热门文章

  1. python global和nonlocal用法解析
  2. Python实现im2col和col2im函数
  3. python教程:sum(1-2+3-4+...+99)
  4. python的if not用法
  5. Python类的约束以及super()剖析
  6. jmeter线程说明_4.centos下Jmeter+InfluxDB+Grafana环境的搭建1
  7. web.xml隐藏html,web.xml
  8. linux ksh 历史命令,防止Linux中的bash(和ksh)历史记录更改
  9. VS cmake远程调试ubuntu项目生成报错:“Does not match the generator used previously: Ninja“(删除.vs隐藏文件夹)
  10. 连接wifi的主机设置静态ip(固定ip)后无法上网的原因