> 백엔드 개발 > PHP 튜토리얼 > PHP에서 클래스 로드 정보

PHP에서 클래스 로드 정보

autoload
풀어 주다: 2023-04-09 18:56:01
원래의
3170명이 탐색했습니다.

객체지향도 중요한 개념이고, 객체지향에서는 클래스도 중요한 개념이지만, 클래스를 사용하려면 클래스 로딩이 핵심입니다.

클래스에 액세스하는 방법에는 두 가지가 있습니다.

  • 인스턴스화된 객체를 통한 액세스

  • 클래스 멤버 액세스

액세스를 위한 전제 조건은 클래스가 메모리에 존재하므로 클래스를 로드해야 한다는 것입니다. 기억 속에 미리.

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;);
?>
로그인 후 복사
rrree

추천: php 튜토리얼

위 내용은 PHP에서 클래스 로드 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿