1.類與對象php
對象:實際存在該類事物中每一個實物的個體。$a =new User(); 實例化後的$a函數
引用�php的別名,兩個不一樣的變量名字指向相同的內容ui
封裝: 把對象的屬性和方法組織在一個類(邏輯單元)裏編碼
繼承:以原有的類爲基礎,建立一個新類,從而代碼複用的目的;指針
多態:容許將子類類型的指針賦值給父類類型的指針。對象
-------------------------------------繼承
2.自動加載對象:ci
自動加載經過定義特殊的__autoload函數,當引用沒有在腳本中定義的類時會自動調用這個函數.資源
1 [php] view plaincopyprint?開發
2 function __autoload($class){
3 require_once("classes/$class.class.php");
4 }
爲何要使用__autoload
1,首先是不知道這個類文件存放在什麼地方,
2,另一個就是不知道何時須要用到這個文件。
3,特別是項目文件特別多時,不可能每一個文件都在開始的部分寫很長一串的 require …
替代了一
require_once ("classes/Books.class.php") ;
require_once ("classes/Employees.class.php" ) ;
require_once ("classes/Events.class.php") ;
require_once ("classes/Patrons.class.php") ;
zend推薦了一種最流行的辦法,在文件名中包含路徑。例以下面的例子:
1 [php] view plaincopyprint?
2
3 view sourceprint?
4 // Main.class
5 function __autoload($class_name) {
6 $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);
7 require_once $path.'.php';
8 }
temp = new Main_Super_Class();
全部的下劃線都會被替換成路徑中的分隔符,上例中就會去 Main/Super/Class.php文件。
缺點:
是在編碼過程當中,必須明確的知道代碼文件應當所處的位置,
並且因爲將文件路徑硬編碼在了類名中,若是須要修改文件夾的結構時,咱們必須手工修改全部的類名。
若是是在一個開發環境中,而且對於速度不是很在乎的話,使用'Include All’這個方法是很是方便的。
經過將全部類文件放在一個或幾個特定文件夾中,而後經過遍歷的方式查找加載。
例如
<?php
$arr = array (
'Project/Classes',
'Project/Classes/Children',
'Project/Interfaces'
);
foreach($arr as $dir) {
$dir_list = opendir($dir);
while ($file = readdir($dir_list)) {
$path = $dir.DIRECTORY_SEPARATOR.$file;
if(in_array($file, array('.', '..')) || is_dir($path))
continue;
if (strpos($file, ".class.php"))
require_once $path;
}
}
?>
另一個方法是在類文件和他的位置之間創建關聯的配置文件,例如:
view sourceprint?
// configuration.php
array_of_associations = array(
'MainSuperClass' = 'C:/Main/Super/Class.php',
'MainPoorClass' = 'C:/blablabla/gy.php'
);
調用的文件
<?php
require 'autoload_generated.php';
function __autoload($className) {
global $autoload_list;
require_once $autoload_list[$className];
}
$x = new A();
?>
3.構造函數和析構函數
PHP 構造方法 __construct() 容許在實例化一個類以前先執行構造方法。
構造方法是類中的一個特殊方法。當使用 new 操做符建立一個類的實例時,構造方法將會自動調用,其名稱必須是 __construct() 。
(在一個類中只能聲明一個構造方法,而是隻有在每次建立對象的時候都會去調用一次構造方法,不能主動的調用這個方法,
因此一般用它執行一些有用的初始化任務。該方法無返回值。)
做用: 用來建立對象時初始化對象
子類執行分類的構造函數parent::__construct().
析構函數: __destruct ()定義:特殊的內成員函數,沒有返回類型,沒有參數,不能隨意調用,也沒有重載;
只是在類對象生命結束的時候,由系統自動調用釋放在構造函數中分配的資源。
與構造方法對應的就是析構方法,析構方法容許在銷燬一個類以前執行的一些操做或完成一些功能,好比說關閉文件、釋放結果集等。
析構函數不能帶有任何參數,其名稱必須是 __destruct() 。