首頁 >後端開發 >php教程 >關於PHP中類別的載入

關於PHP中類別的載入

autoload
autoload原創
2021-03-01 15:50:333191瀏覽

    物件導向是重要的思想,而類別也是物件導向中的重要概念,而類別的載入卻是使用類別的關鍵。

類別的存取方式有兩種:

  • 透過實例化物件存取

  •  類別成員存取

而存取的前提便是記憶體中有類別的存在,所以需要提前將類別載入至記憶體。

1.手動載入

//类文件 Salary.php
<?php
   class Salary{
      public  function Student(){
        echo "Salary下面的Student方法";
      }
   }
?>
应用文件:useSalary.php
<?php
//$s = new Salary();会报错,因为useSalaty.php中间未定义Salary类

include_once &#39;Salary.php&#39;;				//也可以使用require,通常使用_once,因为类不允许重名
$s = new Salary();
echo $s->Student();
?>
<?php
//加载类文件是一种比较消耗资源的方式,可以事先使用class_exists()函数来判定类是否存在,存在就不用加载,不存在才加载
if(!class_exists(&#39;Salary&#39;)){
	//不存在:加载
    include_once &#39;Salary.php&#39;;
}
//使用
$s = new Salary();
?>

2.自動載入

  •    在PHP7之前使用的自動載入機制:利用系統提供的__autoload()函數,然後當系統需要使用類,而記憶體中又不存在的時候,系統就會自動呼叫__autoload()函數來載入類別文件。

<?php
function __autoload($classname){	//参数为类名:即当前需要访问的类的名字
//需要人为定义去哪加载,怎么加载   
    include_once $classname . &#39;.php&#39;;	//假定为当前目录下,类文件名字为:类名.php
}

//使用类:内存目前并没有
$s = new Salary();	//系统发现内存没有Salary,所以调用__autoload()去加载
?>
//若在不同路径下
<?php
//定义自动加载
function __autoload($classname){
    $abc_file = &#39;abc/&#39; . $classname . &#39;.php&#39;;		//如abc/Salary.php
    if(file_exists($c_file)){                      //利用file_exists()判断文件是否存在
        include_once $abc_file;
    }
}
?>
  • 在PHP7後,不建議使用__autoload()函數,而是使用註冊機制,將使用者自訂的函數,放到系統內部,使用spl_autoload_register(定義好的函數)。

<?php
function myself_autoload($classname){		//与__autoload()类似
    $abc_file = &#39;abc/&#39; . $classname . &#39;.php&#39;;		//如abc/Salary.php
    if(file_exists($c_file)){
        include_once $c_file;
    }
}
//此时,上述函数永远不会自动运行,除非将函数注册到系统内部
spl_autoload_register(&#39;myself_autoload&#39;);
?>
//可以定义多个方法
<?php
function wayone_autoload($classname){		
   
function waytwo_autoload($classname){		
    
}
//此时,上述函数永远不会自动运行,除非将函数注册到系统内部
spl_autoload_register(&#39;wayone_autoload&#39;);
spl_autoload_register(&#39;waytwo_autoload&#39;);
?>

推薦:php教學

以上是關於PHP中類別的載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn