백엔드 개발 PHP 문제 PHP에서 밑줄은 무엇을 의미합니까?

PHP에서 밑줄은 무엇을 의미합니까?

Jan 19, 2022 am 09:47 AM
php 밑줄

PHP에서 한 개의 밑줄은 프라이빗 변수와 프라이빗 메서드를 나타내고, 두 개의 밑줄은 PHP 내장 변수를 나타냅니다. 예를 들어, PHP는 두 개의 밑줄로 시작하는 메서드는 매직 메서드로 예약되어 있으므로 함수 이름은 사용하지 않는 것이 좋습니다. 기존 매직 메서드를 오버로드하는 것이 아니라면 __ 로 시작하세요.

PHP에서 밑줄은 무엇을 의미합니까?

이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP 밑줄은 무엇을 의미합니까?

PHP에서 밑줄로 시작하는 변수의 의미

이름 지정 규칙

하나 추가 비공개

의 경우 두 개를 추가하는 것은 일반적으로 시스템 기본값이며 시스템에 의해 미리 정의됩니다. 즉, 소위:

================= =====

"매직" 메서드" 및 "매직 상수"

======================

★PHP 상수는 다음으로 시작하고 끝납니다. 이중 밑줄은 "마법의 상수"입니다:

__LINE_ _파일의 현재 줄 번호.

__FILE__파일의 전체 경로 및 파일 이름입니다.

__DIR__파일이 위치한 디렉터리입니다. 포함된 파일 내에서 사용되는 경우 포함된 파일이 있는 디렉터리를 반환합니다. dirname(__FILE__)과 동일합니다. 루트 디렉토리가 아닌 이상, 디렉토리 이름 뒤에 슬래시가 포함되지 않습니다

참고: 위 내용은 "PHP 중국어 설명서->언어 참조->상수->마법 상수"에서 가져온 것입니다.

php5 이상 버전부터 php 클래스는 매직 메소드를 사용할 수 있습니다.

PHP에서는 두 개의 밑줄(__)로 시작하는 메소드는 매직 메소드로 예약되어 있으므로 기존 매직 메소드를 오버로드하지 않는 한 함수 이름은 __로 시작하지 않는 것이 좋습니다.

PHP의 매직 메소드는 다음과 같습니다: __construct, __destruct, __call, __callStatic,__get, __set, __isset, __unset, __sleep, __wakeup, __toString, __set_state, __clone, __autoload

1, __get, __set

이 두 가지 메소드는 설계되었습니다. 클래스 및 해당 슈퍼클래스에 선언되지 않은 속성의 경우

__get( $property ) 이 메서드는 정의되지 않은 속성이 호출될 때 트리거되어 액세스되는 속성의 이름을 전달합니다.

__set($property, $value) 값을 할당할 때 정의되지 않은 속성인 경우 이 메서드가 트리거됩니다. 전달된 매개 변수는 설정할 속성 이름과 값입니다. 여기서 선언하지 않은 내용에는 개체를 호출할 때 비공개 속성(즉, 이를 수행하는 속성)이 포함됩니다. 접근 권한이 없습니다.)

2, __isset, __unset

__isset( $property ) 정의되지 않은 속성에 대해 isset() 함수가 호출될 때 이 메서드가 호출됩니다.

__unset( $property ) 정의되지 않은 속성에 대해 unset()이 호출될 때 이 메서드는 함수 중에 호출

여기에서 선언되지 않은 속성에는 개체를 사용하여 호출할 때 액세스 제어가 보호되고 비공개인 속성(즉, 액세스 권한이 없는 속성)이 포함됩니다

3. __call( $method, $arg_array ) 이 메소드는 정의되지 않은 메소드를 호출할 때 호출됩니다.

여기서 정의되지 않은 메소드에는 접근 권한이 없는 메소드도 포함되어 있습니다. 해당 메소드가 없으면 상위 클래스로 가서 메소드를 찾으세요. 상위 클래스에 없으면 이 클래스의 __call() 메서드를 호출하고, 이 클래스에 __call() 메서드가 없으면 상위 클래스

4의 __call() 메서드로 이동합니다. __autoload

__autoload 아직 정의되지 않은 클래스를 사용하려고 할 때 자동으로 호출되는 함수입니다. 이 함수를 호출하면 스크립팅 엔진은 PHP가 오류로 인해 실패하기 전에 필요한 클래스를 로드할 수 있는 마지막 기회를 갖게 됩니다.

전역 자동 로딩 클래스를 정의하려면 spl_autoload_register() 메서드를 사용하여 처리 클래스를 PHP 표준 라이브러리에 등록해야 합니다.

<?php  
class Loader  
{  
static function autoload_class($class_name)  
{  
//寻找正确的$class_name类,并引入,没有则抛出异常  
}  
}  
  
/** 
*  设置对象的自动载入 
*  spl_autoload_register — Register given function as __autoload() implementation 
*/  
spl_autoload_register(array(&#39;Loader&#39;, &#39;autoload_class&#39;));  
  
$a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类  
  
?>
로그인 후 복사

참고: __autoload 함수에서 발생한 예외는 catch 문 블록에서 포착할 수 없습니다. 치명적인 오류가 발생하므로 함수 자체에서 잡아야 합니다.

5, __construct, __destruct

__construct 생성자 메서드인 이 메서드는 객체가 생성될 때 호출됩니다. PHP4와 비교하여 이 메서드를 사용하는 장점은 클래스 이름에 관계없이 생성자 메서드가 고유한 이름을 가질 수 있다는 것입니다. 뭐. 그래서 클래스 이름을 변경할 때 생성자 메소드

__destruct 소멸자 메소드의 이름을 변경할 필요가 없습니다. PHP는 객체가 파괴되기 전에 이 메소드를 호출합니다. , 메모리에서 지워지기 전). 기본적으로 PHP는 객체 속성이 차지하는 메모리만 해제하고 객체 관련 리소스를 파괴합니다. 소멸자를 사용하면 객체를 사용한 후 임의의 코드를 실행하여 메모리를 지울 수 있습니다. PHP가 스크립트가 더 이상 객체와 연결되어 있지 않다고 결정하면 소멸자가 호출됩니다.

함수의 네임스페이스에서는 함수가 반환될 때 이런 일이 발생합니다.

전역 변수의 경우 이는 스크립트 끝에서 발생합니다.

객체를 명시적으로 삭제하려면 객체를 가리키는 변수에 다른 값을 할당할 수 있습니다. 일반적으로 변수를 NULL로 할당하거나 unset을 호출합니다.

6, __clone

PHP5의 객체 할당은 참조 할당을 사용합니다. , 객체를 복사하려면 clone 메소드를 사용해야 합니다. 이 메소드가 호출되면 객체는 자동으로 __clone 매직 메소드를 호출합니다. 객체를 복사할 때 일부 초기화 작업을 수행해야 하는 경우 이를 구현할 수 있습니다. __clone 메서드에서.

7. __toString

__toString 메소드는 객체를 인쇄하기 위해 echo를 사용할 때와 같이 객체를 문자열로 변환할 때 자동으로 호출됩니다.

클래스가 이 메소드를 구현하지 않으면 에코를 통해 객체를 인쇄할 수 없습니다. 그렇지 않으면 다음과 같이 표시됩니다. Catchable fatal error: 클래스 테스트의 객체를 문자열로 변환할 수 없습니다.

이 메소드는 문자열을 반환해야 합니다.

PHP 5.2.0 이전에는 __toString 메서드가 echo() 또는 print()와 함께 사용될 때만 효과가 있었습니다. PHP 5.2.0 이후에는 모든 문자열 환경(예: %s 수정자를 사용하여 printf()를 통해)에서 적용할 수 있지만 문자열이 아닌 환경(예: %d 수정자 사용)에서는 사용할 수 없습니다. PHP 5.2.0부터 __toString 메소드를 정의하지 않은 객체가 문자열로 변환되면 E_RECOVERABLE_ERROR 오류가 보고됩니다.

8, __sleep, __wakeup

__sleep 직렬화할 때

__wakeup을 사용하세요. 역직렬화할 때

serialize()를 호출하여 클래스에 매직 이름이 __sleep인 함수가 있는지 확인하세요. 그렇다면 함수는 직렬화 전에 실행됩니다. 개체를 지우고 직렬화해야 하는 개체의 모든 변수 이름이 포함된 배열을 반환해야 합니다.

__sleep을 사용하는 목적은 개체에 있을 수 있는 모든 데이터베이스 연결을 닫거나 보류 중인 데이터를 제출하거나 유사한 정리 작업을 수행하는 것입니다. 또한 이 기능은 완전히 저장할 필요가 없는 매우 큰 개체가 있는 경우에 유용합니다.

반대로, unserialize()는 마법 이름이 __wakeup인 함수가 있는지 확인합니다. 이 함수는 개체에 있을 수 있는 모든 리소스(있는 경우)를 재구성할 수 있습니다.

__wakeup을 사용하는 목적은 직렬화 중에 손실되었을 수 있는 데이터베이스 연결을 다시 설정하고 기타 재초기화 작업을 처리하는 것입니다.

9. __set_state

var_export()가 호출되면 이 정적 메서드가 호출됩니다(PHP 5.1.0부터 유효).

이 메서드의 유일한 매개 변수는 배열('속성' => 값, …) 형식으로 정렬된 클래스 속성을 포함하는 배열입니다.

10. __invoke

함수를 호출하여 객체를 호출하려고 하면 __invoke 메서드가 자동으로 호출됩니다.

PHP5.3.0 이상이 유효합니다

11. __callStatic

__call() 매직 메소드와 유사하게 작동하며, __callStatic()은 정적 메소드 호출을 처리하는 것입니다.

PHP5.3.0 이상이 유효합니다

PHP 실제로 강화되었습니다. __callStatic() 메서드의 정의는 공개되어야 하며 정적으로 선언되어야 합니다. 마찬가지로, __call() 매직 메서드는 다른 모든 매직 메서드와 마찬가지로 public으로 정의되어야 합니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 밑줄은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles