객체지향도 중요한 개념이고, 객체지향에서는 클래스도 중요한 개념이지만, 클래스를 사용하려면 클래스 로딩이 핵심입니다.
클래스에 액세스하는 방법에는 두 가지가 있습니다.
인스턴스화된 객체를 통한 액세스
클래스 멤버 액세스
액세스를 위한 전제 조건은 클래스가 메모리에 존재하므로 클래스를 로드해야 한다는 것입니다. 기억 속에 미리.
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'); ?>rrree
추천: php 튜토리얼
위 내용은 PHP에서 클래스 로드 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!