PHP之OOP 程式設計思想從過程到物件!

2021-07-12 05:10:22 字數 2847 閱讀 5982

有乙個人走進商店,他對老闆說:我想要乙個東西,這個東西呢,它是圓形的,是甜甜的,上面有奶油,並且有一些水果在上面,可以插蠟燭... 他繁複得敘述的這個什麼東西,究竟是什麼呢?其實我不說大家也猜得到:他想要乙個生日蛋糕。

現實生活中,我們不必描述所有一切事物的製作過程,因為有時,我只想要這個事物,並不關心它的過程。

**世界中,我們也可以這樣。

object oriented programming,物件導向的程式設計,使我們的開發變得不再那麼複雜,並大大增加了程式的靈活性和可擴充套件性。如果你尚未用oop思想來完善你的程式設計,那你真的out了。

php中的物件導向,是從php5開始完善的,之前的版本本質上還是面向過程的。面向過程只為我們程式提供了一定程度的**重用。然而,沒有oo的特質,依然不妨礙我們的php開發人員運用這種優秀的程式設計思想,一些含有偽oo設計的面向過程**依然出現在我們的專案中,但是由於本質上仍是面向過程的,可讀性不是很好。

實現物件導向,首先需要知道的兩個重要的概念就是類和物件。

例項1:類和物件

<?php

class cake

$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}

$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}

$thebaker = new baker();

$thebaker ->name = "john";

$thebaker ->makecake();

?>

實際生活中也是一樣,物件和物件之間的互動永不會停止,我們所要做的,就是讓物件和物件間的關係足夠清新,讓類外部**足夠的少。

只是這樣當然還是不夠,類規定了物件,那誰來規定類呢?

答案當然是介面,介面是一種特殊的抽象類。

在使用介面時,請嘗試避免直接引用實現類。相反,使用物件外部的內容可以提供正確的實現。如果你的類將裝入基於某些邏輯的實現,它仍然需要獲取所有實現類的定義,並且那樣做也無法取得任何效果。

初識介面總是會想何時使用介面才會是最佳時機,或許這個問題待到你接觸多了oo思想後就會某天如深夜醒腦般恍然大悟,想要設計良好的類誕生,介面是那麼的必然和自然。並且在php單繼承的特性下,只有接**術才可以真正做到一次性實現多個規範,這也被我們成為單繼承,多實現。即extends只能繼承乙個父類,而implements可以實現多個介面。

當然,避免濫用介面也是良好的程式設計習慣之一,畢竟只要寫在程式中的介面,就會對我之後的**產生一定的約束力,如果不是必然,為什麼寫進這個必須執行的「法律」中去呢?

例項4:實現介面

<?php

inte***ce person

class baker implements person

public function work()

public function laugh()}

$thebaker = new baker();

$thebaker ->setname("john");

$thebaker ->work();

?>

每個人都有工作,現在例子中的john($thebaker),他是個麵點師(class baker),麵點師又必然是乙個人(inte***ce person),一定有乙份工作(function work()),一定會笑(function laugh()),也一定在乙個孩童時就被取了個名字(function setname()),當然,去除掉一種情況,就是,他是個野人。不過野人也有名字(或許他叫狼人),野人也要工作(他要打獵養活自己),他也會笑(可能是打獵時見到了乙隻野兔?)。總之,他只要還是人類,就要從介面person來實現。

從過程到物件,是乙個進步,也是一種思想,它讓我們從邏輯中解放出來,看到乙個個實實在在的實體,當你將這種思想運用於實踐時,就會慢慢感嘆程式設計前輩的無比智慧型和奇思妙想。

來自:tiger-leon

Java的OOP程式設計思想

1 oop 物件導向程式設計 object oriented programming 世界是由乙個個物件組成的,因此物件導向的思維方式更加接近現實世界,物件導向程式設計的組織方式也更加貼近現實世界。物件導向以物件為中心,將物件的內部組織與外部環境區分開來,將表徵物件的內部屬性資料與外部隔離開來,其行...

物件導向程式設計思想(OOP)

本文我將從物件導向程式設計思想是如何解決軟體開發中各種疑難問題的角度,來講述我們物件導向程式設計思想的理解,梳理物件導向四大基本特性 七大設計原則和23種設計模式之間的關係。軟體開發中疑難問題 軟體開發中存在很多其他的問題,上面只是從程式開發和設計的角度看到的部分問題。需求解決上面軟體開發中的問題,...

物件導向程式設計思想(OOP)總結

本文我將從物件導向程式設計思想是如何解決軟體開發中各種疑難問題的角度,來講述我們物件導向程式設計思想的理解,梳理物件導向四大基本特性 七大設計原則和23種設計模式之間的關係。軟體開發中疑難問題 軟體開發中存在很多其他的問題,上面只是從程式開發和設計的角度看到的部分問題。需求解決上面軟體開發中的問題,...