php 类加载,关于PHP中类的加载
類(lèi)的訪問(wèn)方式有兩種:
通過(guò)實(shí)例化對(duì)象訪問(wèn)
類(lèi)成員訪問(wèn)
而訪問(wèn)的前提便是內(nèi)存中有類(lèi)的存在,所以需要提前將類(lèi)加載至內(nèi)存中。
1.手動(dòng)加載
//類(lèi)文件 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類(lèi)
include_once 'Salary.php';//也可以使用require,通常使用_once,因?yàn)轭?lèi)不允許重名
$s = new Salary();
echo $s->Student();
?>
//加載類(lèi)文件是一種比較消耗資源的方式,可以事先使用class_exists()函數(shù)來(lái)判定類(lèi)是否存在,存在就不用加載,不存在才加載
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)需要使用類(lèi),而內(nèi)存中又不存在的時(shí)候,系統(tǒng)就會(huì)自動(dòng)調(diào)用__autoload()函數(shù)來(lái)加載類(lèi)文件。
function __autoload($classname){//參數(shù)為類(lèi)名:即當(dāng)前需要訪問(wèn)的類(lèi)的名字
//需要人為定義去哪加載,怎么加載
include_once $classname . '.php';//假定為當(dāng)前目錄下,類(lèi)文件名字為:類(lèi)名.php
}
//使用類(lèi):內(nèi)存目前并沒(méi)有
$s = new Salary();//系統(tǒng)發(fā)現(xiàn)內(nèi)存沒(mé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()類(lèi)似
$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中类的加载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux 离线安装nfs,ubuntu
- 下一篇: 动态规划算法php,php算法学习之动态