사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-12 08:58:01
원래의
6210명이 탐색했습니다.

사용하려면 네임스페이스만 사용하세요.
하지만 클래스를 호출하려면 클래스 파일을 로드하거나 자동으로 로드해야 합니다.

사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

클래스 중 하나가 도입되더라도 자동 로딩 메커니즘이 없으면 여전히 오류가 보고됩니다. . 첫 번째 소개 방법(자동 로딩 메커니즘이 있는 경우)

namespace Blog\Article;
class Comment { }

//创建一个BBS空间(我有打算开个论坛)
namespace BBS;

//导入一个命名空间
use Blog\Article;
//导入命名空间后可使用限定名称调用元素
$article_comment = new Article\Comment();

//为命名空间使用别名
use Blog\Article as Arte;
//使用别名代替空间名
$article_comment = new Arte\Comment();

//导入一个类
use Blog\Article\Comment;
//导入类后可使用非限定名称调用元素
$article_comment = new Comment();

//为类使用别名
use Blog\Article\Comment as Comt;
//使用别名代替空间名
$article_comment = new Comt();
로그인 후 복사

사용하면 사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

use OSS\OssClient; // 表示引入Class 'OSS\OssClient'
로그인 후 복사

또는 이

$ossClient = new OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
로그인 후 복사
사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명가 작동합니다!

2. 두 번째 도입 방법(자동 로딩 메커니즘이 있는 경우)

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
로그인 후 복사

사용할 때 사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

import('@.ORG.OSS.OssClient'); // thinkphp中的加载机制
로그인 후 복사

php에는 네임스페이스를 자동으로 로드하는 메커니즘이 있다고 생각할 수 있습니다.

프레임워크에는 네임스페이스가 있습니다. Liberary 디렉터리 다음과 같이 모두 자동으로 식별하고 찾을 수 있습니다.

Library Framework

Class library

Directory

│ ├─Think core Think 클래스 라이브러리 패키지 디렉터리

│ ├─Org Org 클래스 라이브러리 패키지 디렉터리

│ ├─... 더 보기 클래스 라이브러리 디렉토리

따라서 네임스페이스가 있으면 파일을 가져올 필요가 없습니다.

하지만 네임스페이스가 없는 클래스의 경우 파일을 가져오지 않으면 오류가 발생합니다.




import이면 충분합니다.



사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

3. autoload사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

이것은 PHP5에서 정의되지 않은 클래스를 인스턴스화할 때 자동으로 로드되는 기능입니다. 다음 예를 보세요.

$ossClient = new OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, false);  // 其中OSS是命名空间
로그인 후 복사
사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명index.php를 실행하면 hello world가 정상적으로 출력됩니다. index.php에는 printit.class.php가 포함되어 있지 않기 때문에 printit을 인스턴스화할 때 자동으로 autoload 함수가 호출된다. $class 매개변수의 값은 클래스 이름인 printit이다.

4.spl_autoload_register
spl_autoload_register()를 다시 살펴보세요. 이 함수는 autoload와 동일한 효과를 갖습니다. 간단한 예를 살펴보겠습니다. 사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명

printit.class.php 
 
<?php 
 
class PRINTIT { 
 
 function doPrint() {
  echo &#39;hello world&#39;;
 }
}
?> 
 
index.php 
 
<?
function autoload( $class ) {
 $file = $class . &#39;.class.php&#39;;  
 if ( is_file($file) ) {  
  require_once($file);  
 }
} 
 
$obj = new PRINTIT();
$obj->doPrint();
?>
로그인 후 복사

autoload를 loadprint 함수로 바꿉니다. 그러나 loadprint는 자동 로드처럼 자동으로 실행되지 않습니다. 이때 spl_autoload_register()는 정의되지 않은 클래스를 발견하면 PHP에 loadprint()를 실행하도록 지시합니다.

사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명spl_autoload_register()는

static

메서드를 호출합니다.

<?
function loadprint( $class ) {
 $file = $class . &#39;.class.php&#39;;  
 if (is_file($file)) {  
  require_once($file);  
 } 
} 
 
spl_autoload_register( &#39;loadprint&#39; ); 
 
$obj = new PRINTIT();
$obj->doPrint();
?>
로그인 후 복사

위 내용은 사용 예, 네임스페이스, 가져온 클래스 파일 및 자동으로 로드된 클래스에 대한 PHP 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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