學習要點: 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();
?>
「我是析構方法」始終顯示在最後面;由於析構方法在類所有用完以後再執行;