面向對象變成的概念php
須要一一種不一樣的方式來考慮如何構造應用程序。經過對象能夠在對應用程序所處理的顯示任務、過程和思想進行編碼是,實施更貼切的建模。OOP方法並非將應用程序考慮成一個將大量數據從一個函數傳遞給下一個函數的控制線程,而是容許將應用程序建模成一組相互協做的對象,而且這些對象能夠獨立的處理某些活動。數據庫
吐槽:和js挺像的數組
OPP的優勢模塊化
能夠輕鬆地將單個的業務需求轉換爲單個的代碼模塊。函數
代碼重用ui
類的模塊化this
吐槽:之後問OPP的優勢就這樣了編碼
opp的組成spa
類(class)一個對象的「藍本」,包含定義屬性和方法的實際代碼線程
對象(object)某個類的運行實例,包含應用程序運行所須要的全部內容數據和狀態信息
繼承(inheritance)能夠定義一種類型類爲不一樣類型類的子類型的能力(相似於正方形是一種矩形)
多態(polymorphism)容許一個類定義爲多個類範疇的成員(例如,轎車是「有引擎的食物」以及「有輪子的事物」)
接口(interface)是指這樣一種作法:設定對象可以作什麼,而不具體定義這些功能(如:狗和人都是「能夠行走的事物」,可是行走的方式有很大的不一樣)
封裝(encapsulation)對象就起內部數據的訪問進行保護的能力
吐槽:背熟吧,騷年
而後下面開始擼代碼了
<?php class Demo{ function sayHello($name){ print"Hello $name"; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->sayHello('white') ?>
<?php class Demo{ public $name; function sayHello(){ print "Hello $this->name!"; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->name = 'white'; $obj1Demo=new Demo(); $obj1Demo->name = 'black'; $objDemo->sayHello(); $obj1Demo->sayHello(); ?>
能夠將name屬性的值設置爲任意所需的數據-包括對象、整數數組、文件句柄或任何其餘沒有意義的值。可是,並不能再設置name屬性時執行任何形式的數據驗證或更新任何其餘的值。
爲了解決這個問題,必須以get[property]和set[property name]的函數形式來實現屬性。這些函數稱爲存取器方法
<?php class Demo{ private $_name; public function sayHello(){ print "Hello" . $this->getName() . "!"; } public function getName(){ return $this->_name; } public function setName($name){ if(!is_string($name) || strlen($name)==0){ throw new Exception("Invalid name value!"); } $this->_name=$name; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->setName('white'); $objDemo->sayHello(); $objDemo->setName(37); ?>
name屬性的成員訪問級別由Public變成private,而且怎家了一個下劃線做爲前綴。下劃線是建議的命名約定,代表私有的成員變量和函數;
私有的內部成員變量不能從類的外部訪問。因爲不能直接訪問這些變量,所以必需要getName()和setName()存取器方法得到這些信息,從而確保類能夠在容許設置值以前檢查該值。。。
成員變量或方法能夠有3個不一樣級別的可見性:公有的、私有的和受保護的。
公有成員能夠任意的代碼訪問。
私有成員只有類自身能夠訪問。這些成員一般用於類的內部處理買而且可能諸如注入某個數據庫鏈接句柄活配置信息之類的內容。
受保護的成員能夠由類自身以及從該類繼承的類使用
對於許多將要建立的類,須要在初次實例化該類的對象時執行一些特殊的設置。例如,可能須要從數據庫中獲取某些信息,或者是初始化某些屬性值。經過建立一個稱爲構造函數的特殊方法能夠執行實例化對象所須要的任何活動,改方法在PHP中是經過名爲_construct()的函數來實現的。在實例化對象時,PHP將自動調用這個特殊的函數
<?php class Demo{ private $_name; public function _construct($name){ $this->name = $name; } function sayHello(){ print "Hello $this->name!"; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->_construct('white'); $objDemo->sayHello(); ?>