學習oop知識之面向對象

學習要點: 1.什麼是面向對象 2.OOP的特色 3.關鍵的 OOP概念 4.建立 OOphp

 

Object /對象 Oriented 面向 /Programming 程序編程

許多語言自己就是面向對象( OOP)的,而PHP用了幾年才引入了這類功能。面向對象的誕生是開發範型一次的重大改變,編程的注意力從新從應用程序的邏輯回到其數據上來。換句話說, OOP將焦點從編程的過程性事件轉向最終建模的真實實體。這使得應用程序更接近於咱們周圍的現實世界。網絡

 

1、 什麼是面向對象函數

l 面向過程學習

這就比如你是公司的一名員工, 今天有個任務要在公司組裝一批電腦。那麼你就調試

開始採購、 討價還價、 運輸回公司、 開始組裝、 佈線網絡、 調試機器、 完成。 也就是說, 面向過程就是具體化的實現,細節明確。對象

 

l 面向對象繼承

這就好像你是公司的總裁, 你佈置給一名員工一個組裝一批電腦的任務。 完畢。接口

也就是說, 面向對象就是抽象化的執行, 具體仍是由那名員工來完成。 而細節方面, 總裁不須要去考慮。 這樣的好處是顯而易見的, 在有管理高層的公司能夠協調做業, 而沒有管理高層的公司,只有一些具體實現功能的員工,會亂作一團。事件

 

2、OOP的特色

封裝 隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪

問級別;將抽象獲得的數據和行爲(或功能)相結合,造成 一個有機的總體,也就是將數據與操做數據的源代碼進行有機的結合,造成「類」,其中數據和函數都是類的成員。

 

主機箱將主板、CPU、內存、顯卡封裝起來,留出一個接口鏈接顯示器、音響等

 

繼承

繼承是從一個基類獲得一個或多個類的機制。 繼承自另外一個類的類被稱爲該類的子類。這種關係一般用父親和孩子來比喻。子類

將繼承父類的特性。 這些特性由屬性和方法組成。 子類能夠增長父類以外的新功能, 所以子類也被稱爲父類的「 擴展」。

 

父親的愛好釣魚,兒子不喜歡能夠不繼承;

父親的老婆是父親的私有財產,兒子不能夠繼承;

兒子是父親的子類,子類有本身的東西,有繼承的東西,有些東西能夠繼承,有些東西不能夠繼承;

 

多態

多態是指OOP可以根據使用類的上下文來從新定義或改變類的性質或行爲,或者說接口的多種不一樣的實現方式即爲多態。把不一樣的子類對象都看成父類來看, 能夠屏蔽不一樣子類對象之間的差別,寫出通用的代碼,作出通用的編程,以適應需求的不斷變化。

 

剪是一種方法,不一樣的人去剪有不一樣的動做不一樣的行爲;

 

程序尚未達到必定的水平,繼承和多態用的很少;

 

3、關鍵的OOP概念

類( class) 類是對某個對象的定義。 它包含有關對象動做方式的信息, 包括它的名稱、 方

法、 屬性和事件。 實際上它自己並非對象, 由於它不存在於內存中。 當引用類的

代碼運行時, 類的一個新的實例, 即對象, 就在內存中建立了。 雖然只有一個類,

但能從這個類在內存中建立多個相同類型的對象。 對象( object) 對象是一件事、 一個實體、 一個名詞, 能夠得到的東西, 能夠想象有本身的標

識的任何東西。對象是類的實例化。一些對象是活的,一些對象不是。 好比這輛汽車、這我的、這間房子、這張桌子、這株植物、這張支票、這件雨衣。

歸納來講就是: 一切皆對象。 例如:類是對象的抽象定義,說白了,若是這個對象是電腦,類能夠建立出許多對

象,類能夠生成不少電腦,再白一點,類能夠當成一個電腦生產廠,能夠生成出不少很

多臺電腦。

 

 

字段( filed) 字段是用於描述類的某方面的性質,它與通常的PHP變量很是類似,只是有一些

細微的差異。 例如:電腦品牌,電腦的型號等特性。

屬性( attribute) 經過方法來訪問和操做字段, 一方面能夠保護字段, 同時還容許訪問公共字段一

樣訪問數據。 例如:獲取電腦品牌,設置電腦品牌等操做。

 

方法( method)

方法與函數很是類似, 只不過方法是用來定義類的行爲。 與函數同樣, 方法可

以接受輸入參數,能夠向調用者返回一個值。

例如:打開電腦,輸入文本,運行程序。

4、建立OOP

類的建立、對象的聲明;

 

new Computer()在堆中運行;$computer1在棧中運行;$computer指向的是堆的地址;

【參看demo1.php】

<?php

//怎樣去建立類,格式:修飾符class 類名 {}

//咱們去建立一個電腦的類,這類能夠建立出對象(生產出電腦)

 

class Computer{ //類名第一個字母大寫

 

}

 

//建立一臺電腦出來,也就是對象的聲明

//格式,變量 = new 類名()

 

//new Computer()表示實例化的過程(意思就是建立一個對象)

//$computer1 = new Computer()這個過程就是把實例化對象的地址賦給$computer1

//$computer1咱們就能夠稱做爲對象的應用

$computer1 = new Computer(); //這是咱們建立的第一臺電腦

//$computer2 = new Computer(); //這是咱們建立的第二臺電腦

 

//若是但願$computer2在棧中也是指向堆中的new Computer()

$computer2 = $computer1;

 

echo var_dump($computer1);

echo "<br>";

echo var_dump($computer2);

?>

 

繼續分析:又一個New Computer()在堆中運行;兩個互相不影響;

 

 

 

$computer1 = new Computer(); //這是咱們建立的第一臺電腦

//若是但願$computer2在棧中也是指向堆中的new Computer()

$computer2 = $computer1;

 

 

 

字段(成員)的添加

 

 

 

【參看demo2.php】

<meta charset="utf-8">

<?php

class Computer{

//字段成員的聲明格式,修飾符 變量名 [=xxx];

/*

public $_name = '聯想';//public表示公有,類外能夠訪問;

public $_model = 'i7';

 

通常在類中不直接設定值

*/

public $_name;

public $_model;

}

 

//建立一個對象,生產出一臺電腦 ->表示指向

$computer1 = new Computer();

/*

echo $computer1->_name;

echo $computer1->_model;

echo '<br/>';

 

$computer1->_name = 'dell';

echo $computer1->_name;

*/

 

//給成員字段賦值

$computer1->_name = '聯想';

//取值

echo $computer1->_name;

?>

 

 

 

方法的建立

【參看demo3.php】

<meta charset="utf-8">

<?php

class Computer{

public $_name;

public $_model;

 

//建立方法的格式,修飾符function 方法名(){}

//若是不加修飾符,默認就是public

public function _run(){

echo '我是運行的方法';

}

 

}

 

//建立一個對象,生產出一臺電腦->表示指向

$computer1 = new Computer();

$computer1->_run(); //注意:前面不加$

?>

 

 

 

【參看demo4.php】

<meta charset="utf-8">

<?php

class Computer{

 

public $_name;

public $_model;

}

 

$computer1 = new Computer();

 

$computer1->_name = '聯想';

//echo $computer1->_name;

 

$computer2 = new Computer();

echo $computer2->_name;

//發現$computer2打印不出聯想

//由於參看堆內存發現new Computer()裏面沒有_name聯想

 

 

$computer2 = $computer1;

//將$computer1的指向賦值給$computer2便可;

echo $computer2->_name;

?>

 

 

【參看demo5.php】

<meta charset="utf-8">

<?php

class Computer{

 

public $_name;

public $_model;

 

public function _run($_who){ //傳參的方法

echo $_who.'我是運行的方法';

}

}

 

$computer1 = new Computer();

$computer1->_run('Lee');

?>

 

 

構造方法

【參看demo6.php】

<meta charset="utf-8">

<?php

class Computer{

 

//建立一個構造方法

public function Computer(){

echo '我是構造方法';

}

/*

public function Computer123(){

echo '我是普通方法';

}

*/

}

 

//$computer = new Computer();

//只要實例化,就能夠運行構造方法

new Computer();

//其實new Computer就已經調用Computer()方法了;

 

//$computer->Computer123();

?>

 

 

 

 

【參看demo7.php】

<meta charset="utf-8">

<?php

class Computer{

//我要建立一個構造方法

public function __construct(){

echo '我是比較先進的構造方法';

}

}

 

new Computer();

?>

 

 

 

 

析構方法

【參看demo8.php】

<meta charset="utf-8">

<?php

class Computer{

 

//我要建立一個構造方法

public function __construct(){

echo '我是比較先進的構造方法';

}

 

//析構方法

public function __destruct(){

echo '我是析構方法';

}

 

//普通方法

public function _run(){

echo '我是普通方法';

}

}

 

$computer = new Computer();

$computer->_run();

?>

 

「我是析構方法」始終顯示在最後面;由於析構方法在類所有用完以後再執行;

相關文章
相關標籤/搜索