php 类加载,关于PHP中类的加载
類的訪問方式有兩種:
通過實(shí)例化對(duì)象訪問
類成員訪問
而訪問的前提便是內(nèi)存中有類的存在,所以需要提前將類加載至內(nèi)存中。
1.手動(dòng)加載
//類文件 Salary.php
class Salary{
public function Student(){
echo "Salary下面的Student方法";
}
}
?>
應(yīng)用文件:useSalary.php
//$s = new Salary();會(huì)報(bào)錯(cuò),因?yàn)閡seSalaty.php中間未定義Salary類
include_once 'Salary.php';//也可以使用require,通常使用_once,因?yàn)轭惒辉试S重名
$s = new Salary();
echo $s->Student();
?>
//加載類文件是一種比較消耗資源的方式,可以事先使用class_exists()函數(shù)來判定類是否存在,存在就不用加載,不存在才加載
if(!class_exists('Salary')){
//不存在:加載
include_once 'Salary.php';
}
//使用
$s = new Salary();
?>
2.自動(dòng)加載
在PHP7之前使用的自動(dòng)加載機(jī)制:利用系統(tǒng)提供的__autoload()函數(shù),然后當(dāng)系統(tǒng)需要使用類,而內(nèi)存中又不存在的時(shí)候,系統(tǒng)就會(huì)自動(dòng)調(diào)用__autoload()函數(shù)來加載類文件。
function __autoload($classname){//參數(shù)為類名:即當(dāng)前需要訪問的類的名字
//需要人為定義去哪加載,怎么加載
include_once $classname . '.php';//假定為當(dāng)前目錄下,類文件名字為:類名.php
}
//使用類:內(nèi)存目前并沒有
$s = new Salary();//系統(tǒng)發(fā)現(xiàn)內(nèi)存沒有Salary,所以調(diào)用__autoload()去加載
?>
//若在不同路徑下
//定義自動(dòng)加載
function __autoload($classname){
$abc_file = 'abc/' . $classname . '.php';//如abc/Salary.php
if(file_exists($c_file)){ //利用file_exists()判斷文件是否存在
include_once $abc_file;
}
}
?>
在PHP7后,不建議使用__autoload()函數(shù),而是使用一種注冊(cè)機(jī)制,將用戶自定義的函數(shù),放到系統(tǒng)內(nèi)部,使用spl_autoload_register(定義好的函數(shù))。
function myself_autoload($classname){//與__autoload()類似
$abc_file = 'abc/' . $classname . '.php';//如abc/Salary.php
if(file_exists($c_file)){
include_once $c_file;
}
}
//此時(shí),上述函數(shù)永遠(yuǎn)不會(huì)自動(dòng)運(yùn)行,除非將函數(shù)注冊(cè)到系統(tǒng)內(nèi)部
spl_autoload_register('myself_autoload');
?>
//可以定義多個(gè)方法
function wayone_autoload($classname){
function waytwo_autoload($classname){
}
//此時(shí),上述函數(shù)永遠(yuǎn)不會(huì)自動(dòng)運(yùn)行,除非將函數(shù)注冊(cè)到系統(tǒng)內(nèi)部
spl_autoload_register('wayone_autoload');
spl_autoload_register('waytwo_autoload');
?>
推薦:php教程
總結(jié)
以上是生活随笔為你收集整理的php 类加载,关于PHP中类的加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux 离线安装nfs,ubuntu
- 下一篇: 原来C语言和其他高级语言的最大的区别是这
