物件導向是重要的思想,而類別也是物件導向中的重要概念,而類別的載入卻是使用類別的關鍵。
類別的存取方式有兩種:
透過實例化物件存取
類別成員存取
而存取的前提便是記憶體中有類別的存在,所以需要提前將類別載入至記憶體。
1.手動載入
//类文件 Salary.php <?php class Salary{ public function Student(){ echo "Salary下面的Student方法"; } } ?>
应用文件:useSalary.php <?php //$s = new Salary();会报错,因为useSalaty.php中间未定义Salary类 include_once 'Salary.php'; //也可以使用require,通常使用_once,因为类不允许重名 $s = new Salary(); echo $s->Student(); ?>
<?php //加载类文件是一种比较消耗资源的方式,可以事先使用class_exists()函数来判定类是否存在,存在就不用加载,不存在才加载 if(!class_exists('Salary')){ //不存在:加载 include_once 'Salary.php'; } //使用 $s = new Salary(); ?>
2.自動載入
在PHP7之前使用的自動載入機制:利用系統提供的__autoload()函數,然後當系統需要使用類,而記憶體中又不存在的時候,系統就會自動呼叫__autoload()函數來載入類別文件。
<?php function __autoload($classname){ //参数为类名:即当前需要访问的类的名字 //需要人为定义去哪加载,怎么加载 include_once $classname . '.php'; //假定为当前目录下,类文件名字为:类名.php } //使用类:内存目前并没有 $s = new Salary(); //系统发现内存没有Salary,所以调用__autoload()去加载 ?>
//若在不同路径下 <?php //定义自动加载 function __autoload($classname){ $abc_file = 'abc/' . $classname . '.php'; //如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 = 'abc/' . $classname . '.php'; //如abc/Salary.php if(file_exists($c_file)){ include_once $c_file; } } //此时,上述函数永远不会自动运行,除非将函数注册到系统内部 spl_autoload_register('myself_autoload'); ?>
//可以定义多个方法 <?php function wayone_autoload($classname){ function waytwo_autoload($classname){ } //此时,上述函数永远不会自动运行,除非将函数注册到系统内部 spl_autoload_register('wayone_autoload'); spl_autoload_register('waytwo_autoload'); ?>
推薦:php教學
以上是關於PHP中類別的載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!