PHP之OOP: 编程思想从过程到对象!

转载 2016年05月30日 17:03:01

有一个人走进商店,他对老板说:我想要一个东西,这个东西呢,它是圆形的,是甜甜的,上面有奶油,并且有一些水果在上面,可以插蜡烛... 他繁复得叙述的这个什么东西,究竟是什么呢?其实我不说大家也猜得到:他想要一个生日蛋糕。

现实生活中,我们不必描述所有一切事物的制作过程,因为有时,我只想要这个事物,并不关心它的过程。

代码世界中,我们也可以这样。

Object Oriented Programming,面向对象的程序设计,使我们的开发变得不再那么复杂,并大大增加了程序的灵活性和可扩展性。如果你尚未用OOP思想来完善你的程序设计,那你真的OUT了。

PHP中的面向对象,是从PHP5开始完善的,之前的版本本质上还是面向过程的。面向过程只为我们程序提供了一定程度的代码重用。然而,没有OO的特质,依然不妨碍我们的PHP开发人员运用这种优秀的编程思想,一些含有伪OO设计的面向过程代码依然出现在我们的项目中,但是由于本质上仍是面向过程的,可读性不是很好。

实现面向对象,首先需要知道的两个重要的概念就是类和对象。

 

实例1:类和对象

<?php

class Cake{

    public $shape;//蛋糕的形状

    public $cream;//奶油的量

public $eggs; //鸡蛋的量

public $water;//水的量

}

 

$cake1 = new Cake();

$cake1 ->shape= "circle";

$cake1 ->cream= "500g";

$cake1 ->eggs = 5;

 

echo $cake1 ->shape;

echo $cake1 ->cream;

echo $cake1 ->eggs;

?>

 

现在我们有了一个制作蛋糕的菜谱(类),里面当然要有制作这个蛋糕需要什么原材料(成员属性),还要告诉我们如何去做(成员方法),但是有了这些,我们还没有拥有一个实实在在的蛋糕(对象),只有当我们照着菜谱上写的,把原材料备齐,照着方法一步一步去做,方可的到这个这个蛋糕(对象的实例化)。

 

有了这些还不够,我们都知道面向对象的三大特性:封装、继承、多态。实现良好的类有时还需要用到模式等等。而在这些之中,封装的足够好的类,可以将我们系统的功能实现模块化,这是优秀的OO设计重要特性之一,可以帮助我们更好的实现网站的维护。

 

实例2:封装

<?php

class Cake{

    public $shape;//蛋糕的形状

    public $cream;//奶油的量

public $eggs; //鸡蛋的量

public $water;//水的量

public $bakeTime;//烤制时间

public $others;//其他配料

public function makeCake(){

              $cakeBase = $this->water."水加".$this->egg."个鸡蛋和".$this->others."用力搅拌".$this->bakeTime;

              $cake      = "将".$cakeBase."切成".$this->shape.",加入".$this->cream."奶油";

              return $cake;

}

}

 

$cake1 = new Cake();

$cake1 ->shape     = "circle";

$cake1 ->cream     = "500g";

$cake1 ->eggs      = 5;

$cake1 ->water     = "1L";

$cake1 ->bakeTime = "50m";

$cake1 ->others    = "suger,butter";


$cake1 ->makeCake();

?>

 

我们把如何制作都放入makeCake()方法中,我不需要知道内部实现,如同我不需要跟蛋糕店老板说全部制作过程,只需要告诉他:我要做一个蛋糕:)

实例中的$cake1,就是我们得到的可口蛋糕啦,和抽象的类不一样,它是实实在在存在在内存中的。

等等,还没有完,现在我们的高级面点师来了,他知道如何去做。

 

 

 

 

 

实例3:对象的调用

 

<?php

class Baker{

    public $name; //面点师的名字

public function makeCake(){

             $cake1 = new Cake();

             $cake1 ->shape     = "circle";

                 $cake1 ->cream     = "500g";

                 $cake1 ->eggs      = 5;

                 $cake1 ->water     = "1L";

                 $cake1 ->bakeTime = "50m";

                 $cake1 ->others    = "suger,butter";


                 $cake1 ->makeCake();

}

}

 

$theBaker = new Baker();

$theBaker ->name = "John";


$theBaker ->makeCake();

?>

 

实际生活中也是一样,对象和对象之间的交互永不会停止,我们所要做的,就是让对象和对象间的关系足够清新,让类外部代码足够的少。

只是这样当然还是不够,类规定了对象,那谁来规定类呢?

答案当然是接口,接口是一种特殊的抽象类。

在使用接口时,请尝试避免直接引用实现类。相反,使用对象外部的内容可以提供正确的实现。如果你的类将装入基于某些逻辑的实现,它仍然需要获取所有实现类的定义,并且那样做也无法取得任何效果。

初识接口总是会想何时使用接口才会是最佳时机,或许这个问题待到你接触多了OO思想后就会某天如深夜醒脑般恍然大悟,想要设计良好的类诞生,接口是那么的必然和自然。并且在PHP单继承的特性下,只有接口技术才可以真正做到一次性实现多个规范,这也被我们成为单继承,多实现。即extends只能继承一个父类,而implements可以实现多个接口。

当然,避免滥用接口也是良好的编程习惯之一,毕竟只要写在程序中的接口,就会对我之后的代码产生一定的约束力,如果不是必然,为什么写进这个必须执行的“法律”中去呢?

 

 

 

 

 

 

实例4:实现接口

<?php

interface Person{

    funciton setName();

    funciton work();

    function laugh();

}

class Baker implements Person{

    public $name;

public function setName($name){

       $this->name = $name;

}

 

 

public function work(){

             $cake1 = new Cake();

             $cake1 ->shape     = "circle";

                 $cake1 ->cream     = "500g";

                 $cake1 ->eggs      = 5;

                 $cake1 ->water     = "1L";

                 $cake1 ->bakeTime = "50m";

                 $cake1 ->others    = "suger,butter";
                 $cake1 ->makeCake();

                 $this  ->laugh();

}

public function laugh(){

            echo "Laughing out!";

}

}

 

$theBaker = new Baker();

$theBaker ->setName("John");
$theBaker ->work();

 

?>

 

每个人都有工作,现在例子中的John($theBaker),他是个面点师(class Baker),面点师又必然是一个人(interface Person),一定有一份工作(function work()),一定会笑(function laugh()),也一定在一个孩童时就被取了个名字(function setName()),当然,去除掉一种情况,就是,他是个野人。不过野人也有名字(或许他叫狼人),野人也要工作(他要打猎养活自己),他也会笑(可能是打猎时见到了一只野兔?)。总之,他只要还是人类,就要从接口Person来实现。

从过程到对象,是一个进步,也是一种思想,它让我们从逻辑中解放出来,看到一个个实实在在的实体,当你将这种思想运用于实践时,就会慢慢感叹编程前辈的无比智慧和奇思妙想。



                                                                                                                                      来自:Tiger-Leon

php之oop:编程思想从过程到对象

有一个人走进商店,他对老板说:我想要一个东西,这个东西呢,它是圆形的,是甜甜的,上面有奶油,并且有一些水果在上面,可以插蜡烛... 他繁复得叙述的这个什么东西,究竟是什么呢?其实我不说大家也猜得到:他...
  • u013782819
  • u013782819
  • 2015年05月07日 10:27
  • 448

OOP 面向对象编程

面向对象 对象的概念是面向对象技术的核心。在现实世界里,我们面对的所有事物都是对象,如计算机、电视机、自行车等。在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世...
  • php_1314
  • php_1314
  • 2015年06月16日 16:20
  • 788

PHP的面向对象编程思想

这篇文章介绍了在PHP中的面向对象编程(OOP,Object Oriented Programming)。同时演示了如何通过使用一些OOP的概念和PHP的技巧来减少编码和提高质量。PHP 是一个混合型...
  • qq_34275925
  • qq_34275925
  • 2016年06月20日 10:45
  • 3537

设计模式系列:OOP设计6大原则

前言相信有过开发经验的人都有过这种体验:让你接手一个的项目,2种情况。A.这个项目已经被好几个人,甚至好几代程序员开发维护过;B.这个项目等待你的全新开发。不给你设时间期限,你更愿意选择哪一个?我相信...
  • Xiong_IT
  • Xiong_IT
  • 2017年01月12日 13:00
  • 2742

OOP和MVC区别

一个思想                                                        一个模式 (模式是凌驾于面向对象之上的一种存在) OOP是面向对象编程    ...
  • sinat_37212928
  • sinat_37212928
  • 2017年06月06日 09:10
  • 478

php面向对象编程之--封装

php面向对象编程的三大特征 ①、封装 ②、继承 ③、多态 抽象:我们在前面研究类时,实际上是把一类事物的共有的属性和行为提取出来,形成一个物理模型。这种研究问题的方法称为抽象。 封装:  封装...
  • u013372487
  • u013372487
  • 2015年07月01日 17:20
  • 1216

转:PHP之OOP--编程思想从过程到对象!

PHP之OOP: 编程思想从过程到对象!本文转贴李明老师的笔记:http://student.csdn.net/space.php?uid=129820&do=blog&id=32945虽然本文写的是...
  • toyo_8410
  • toyo_8410
  • 2010年06月11日 09:41
  • 407

从一些简单代码实例彻底理解面向对象编程思想|OOP本质是什么?

从Rob Pike 的 Google+上的一个推看到了一篇叫《Understanding Object Oriented Programming》的文章,我先把这篇文章简述一下,然后再说说老牌黑客Ro...
  • littlesmallless
  • littlesmallless
  • 2017年03月01日 22:19
  • 500

重难点--JaveScript面向对象

面向对象 概念 面向对象(Object Oriented) 面向对象不是一个技术,而是一种处理问题的思路,是一种编程思想。 是一种新兴的程序设计方法,或者是一种新的程序设计规范(parad...
  • sinat_38529191
  • sinat_38529191
  • 2017年05月02日 16:37
  • 170

《JAVA编程思想》读书笔记1——OOP思想

面向对象思想JAVA是一种面向对象编程语言,它基于Smalltalk语言,作为OOP语言,它具有以下五个基本特性 万物皆对象,每一个对象都会存储数据,并且可以对自身执行操作。因此,每一个对象包含两部分...
  • yu616568
  • yu616568
  • 2016年05月03日 22:34
  • 1241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP之OOP: 编程思想从过程到对象!
举报原因:
原因补充:

(最多只允许输入30个字)