백엔드 개발 PHP 튜토리얼 PHP 클래스의 매직 메소드 및 클래스 자동 로딩

PHP 클래스의 매직 메소드 및 클래스 자동 로딩

Jul 25, 2016 am 09:03 AM

  1. class Connection {
  2. protected $link;
  3. private $server, $username, $password, $db;
  4. public function __construct ($server, $username, $password, $db) {
  5. $this->server = $server;
  6. $this->username = $username;
  7. $this->password = $password;
  8. $this->db = $db;
  9. $this->connect();
  10. }
  11. 비공개 함수 connect() {
  12. $this- >link = mysql_connect($this->server, $this->사용자 이름, $this->password);
  13. mysql_select_db($this->db, $this->link);
  14. }
  15. 공개 함수 __sleep() {//직렬화할 때 이러한 속성의 값을 저장하면 됩니다
  16. return array('server', 'username', 'password', 'db') ;/ /배열을 반환해야 함
  17. }
  18. public function __wakeup() { //객체를 역직렬화한 후 즉시 데이터베이스에 연결
  19. $this->connect();
  20. }
  21. }
코드 복사

__toString(): 객체를 문자열로 사용하려고 할 때 호출되며, js 객체의 toString()

과 유사한 문자열을 반환합니다.

__invoke(): 객체가 함수로 호출될 때 호출됩니다. 좋다 $object($a,$b)는 $object->__invoke($a,$b)

를 호출합니다.

__set_state(): 객체에 대해 var_export()가 호출되면 해당 반환 값이 인쇄됩니다.

__clone(): 객체에 대해 clone 연산을 사용할 때 호출되며 반환 값이 없습니다. 이 메서드는 복제로 얻은 객체가 다른 속성 값을 가질 수 있도록 복제로 얻은 객체의 속성을 반환하기 전에 수정하는 데 사용할 수 있습니다. ​오브젝트 복제 작업을 방지하기 위해 null 또는 false를 반환하여 반환할 수 없습니다. 복제 작업으로 얻은 객체는 이 메서드의 반환 값을 통해 반환되지 않습니다.

참고: __get 및 __set 메서드는 객체 전용 속성 및 보호 속성에 대한 액세스를 유연하게 처리하는 데 자주 사용할 수 있습니다. PHP 객체가 메소드를 결정하기 위해 isset() 또는 empty()를 사용할 때 메소드를 액세스 가능한 속성으로 간주하지 않기 때문입니다(자바스크립트를 너무 많이 작성하면 주의하십시오. PHP에서 속성은 속성이고 메소드는 메소드입니다. 혼동할 수 없습니다) __get을 사용할 때 isset($this->key)를 사용하여 이 메서드의 속성을 판단할 수 있으며, 특히 비공개 속성을 처리해야 하는 경우 __set()이 정의되어 있는지와 어떻게 처리하는지 주의해야 합니다. 오해를 피하기 위해 정의합니다. 객체의 메서드가 호출 시 매개 변수 전달을 요구하지 않거나 전달 매개 변수가 고정된 경우 __get() 메서드를 통해 메서드에 속성을 부여하고 자동으로 __get()에서 메서드를 호출하여 값을 반환할 수 있습니다.

예를 들어 클래스에 __get 메서드를 다음과 같이 정의합니다.

  1. 공개 함수 __get($key){

  2. if(property_exists($this,$key)){
  3. return $this->$key; //개인 및 보호 속성은 액세스를 허용합니다
  4. }else if(method_exists($this,'get'.$key)){
  5. return $this->{' get'.$key}();
  6. //또는...
  7. // $methodName = 'get'.$key
  8. //return $this->
  9. }else{
  10. 새로운 예외 발생('class '.__class__.' do not have property '.$key);
  11. }
  12. }

  13. //메소드 속성 액세스:

  14. $obj->getModelName();
  15. $obj->ModelName; //속성

코드 복사

unserialize() 메서드: 개체를 역직렬화하려고 할 때 이 함수는 개체의 클래스를 알아야 합니다. 직렬화된 문자열을 다른 방법으로 얻은 경우에는 스크립트 환경에서 정의되지 않습니다. unserialize()의 두 번째 매개변수는 클래스가 있는 파일을 가져오는 데 사용되는 선택적 콜백 매개변수입니다. 함수 importClass($calssName){ include('xxxx.php'); //이 클래스를 포함하는 파일 } 직렬화 해제($objstr,$callbackName);

클래스 자동 로딩: __autoload()

__autoload()는 특정 클래스의 메소드가 아닌 PHP 실행 환경에서 합의된 함수로, 사용 전 현재 파일에 클래스를 로드하지 않은 경우 자동으로 __autoload() 함수를 호출하여 해당 클래스를 로드하게 됩니다. 일반적으로 이러한 클래스의 로딩 규칙은 합의되어 있습니다. 예를 들어, 이러한 클래스는 클래스 이름을 딴 파일에 포함됩니다. 이 방법은 클래스의 주문형 로딩을 실현하고 스크립트 실행 전에 불필요한 클래스를 로딩하는 것을 방지하여 리소스 사용량을 줄일 수 있습니다. 및 제출 성과.

참고: __autoload() 내의 오류는 try-catch로 포착할 수 없습니다.

  1. function __autoload($class_name){
  2. require_once(PATH.'/calsses/'.$class_name.'.php');
  3. }
  4. $obj1 = new mycalss1();
코드 복사

__autoload()에 의해 자동으로 호출되는 함수를 등록합니다. spl 코드 베이스는 PHP5.0 이후 기본적으로 자동으로 활성화됩니다. spl_autoload_register([callback]); //__autoload()에 특정 로딩 코드를 작성하는 대신 이 함수를 사용하여 콜백 함수를 등록할 수 있습니다.

클래스 메소드를 콜백 함수로 사용하는 경우 배열을 전달해야 합니다. spl_autoload_register(array('class_name'|$obj,'method_name'));

예: spl_autoload_register(array($this,'autoloadClass')); spl_autoload_register(array('YiiBase','autoload'));//YII 프레임워크의 자동 로딩 클래스 구현, YiiBase 클래스는 자동 로드 메소드를 구현합니다. spl_autoload_register()는 여러 로드 함수를 등록할 수 있으며, 등록된 모든 로드 함수는 클래스 파일을 성공적으로 로드하기 전에 하나씩 시도됩니다. 이는 서로 다른 클래스가 서로 다른 논리를 사용하여 클래스 파일을 가져올 때 유용합니다. spl_autoload_unregister(); //등록된 로드 함수를 취소합니다. 매개변수는 spl_autoload_register()와 동일합니다. spl_autoload_functions();//등록된 모든 __autoload() 함수를 배열 형식으로 반환

spl_autoload(class_name[,file_extensions]); //__autoload() 함수의 기본 구현입니다. spl_autoload_register() 호출 시 함수 이름이 전달되지 않으면 기본적으로 이 함수가 사용됩니다. 이 함수의 실행 규칙은 다음과 같습니다. 클래스 이름은 파일 이름으로 소문자로 변환되고 전달된 file_extensions(복수) 확장자는 쉼표로 구분되며, 확장자는 기본(.inc 및 .php)입니다. 얻은 파일 이름을 기반으로 php.ini에 설정된 포함 경로에서 검색해 보십시오.

spl_autoload_call(class_name);//등록된 모든 __autoload() 함수를 수동으로 호출하여 클래스 파일을 적극적으로 로드합니다. spl_autoload_extensions([file_extentions]); //spl_autoload()에서 사용할 수 있는 파일 확장자를 등록하거나 반환합니다. 확장자는 .a.b 형식일 수 있습니다. spl_autoload_extensions(".class.php"); spl_autoload_register(); //spl_autoload()를 사용하여 클래스 파일을 자동으로 로드합니다. //이런 방식으로 spl_autoload('myclassName');은 "myclassName.class.php" 파일을 로드하려고 시도합니다.



본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

세션 납치는 어떻게 작동하며 PHP에서 어떻게 완화 할 수 있습니까? 세션 납치는 어떻게 작동하며 PHP에서 어떻게 완화 할 수 있습니까? Apr 06, 2025 am 12:02 AM

세션 납치는 다음 단계를 통해 달성 할 수 있습니다. 1. 세션 ID를 얻으십시오. 2. 세션 ID 사용, 3. 세션을 활성 상태로 유지하십시오. PHP에서 세션 납치를 방지하는 방법에는 다음이 포함됩니다. 1. 세션 _regenerate_id () 함수를 사용하여 세션 ID를 재생산합니다. 2. 데이터베이스를 통해 세션 데이터를 저장하십시오.

JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. Apr 05, 2025 am 12:04 AM

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? Apr 01, 2025 pm 02:57 PM

phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? PHPStorm으로 개발할 때 때때로 CLI (Command Line Interface) 모드에서 PHP를 디버그해야합니다 ...

확실한 원칙과 PHP 개발에 적용되는 방법을 설명하십시오. 확실한 원칙과 PHP 개발에 적용되는 방법을 설명하십시오. Apr 03, 2025 am 12:04 AM

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

시스템 재시작 후 UnixSocket의 권한을 자동으로 설정하는 방법은 무엇입니까? 시스템 재시작 후 UnixSocket의 권한을 자동으로 설정하는 방법은 무엇입니까? Mar 31, 2025 pm 11:54 PM

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). Apr 03, 2025 am 12:04 AM

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

프레임 워크 보안 기능 : 취약점 보호. 프레임 워크 보안 기능 : 취약점 보호. Mar 28, 2025 pm 05:11 PM

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

See all articles