>  기사  >  백엔드 개발  >  PHP 매직 상수 소개 및 매직 함수 사용 코드 설명 요약

PHP 매직 상수 소개 및 매직 함수 사용 코드 설명 요약

伊谢尔伦
伊谢尔伦원래의
2017-07-17 15:18:201333검색

마법 상수

1. LINE
파일의 현재 줄 번호를 반환합니다.

2. FILE
파일의 전체 경로와 파일 이름을 반환합니다. include 파일에서 사용되는 경우 ​​포함 파일 이름을 반환합니다. PHP 4.0.2부터 FILE에는 항상 절대 경로가 포함되어 있지만 그 이전 버전에는 때때로 상대 경로가 포함되어 있었습니다.

3. FUNCTION
함수 이름을 반환합니다(PHP 4.3.0에 새로 추가됨). PHP 5부터 이 상수는 정의된 대로 함수 이름을 반환합니다(대소문자 구분). PHP 4에서 이 값은 항상 소문자입니다.

4. CLASS
클래스 이름을 반환합니다(PHP 4.3.0의 새로운 기능). PHP 5부터 이 상수는 정의되었을 때 클래스의 이름을 반환합니다(대소문자 구분). PHP 4에서는 이 값은 항상 소문자입니다.

5. METHOD
클래스의 메소드 이름을 반환합니다(PHP 5.0.0에 새로 추가됨). 정의된 대로 메서드의 이름을 반환합니다(대소문자 구분).

매직 함수란 무엇인가요?

처음에 나오는 함수를 매직 함수라고 합니다. 이러한 함수는 set() get() 등 특정 조건에서 실행됩니다.
또는 설정 시 존재하지 않습니다.
어떤 마법 함수가 있나요?
일반적으로 다음과 같은 마법 함수가 있습니다
construct() destruct() get() set() isset() unset() call() callStatic ( )
sleep() wakeup() toString() set_state() clone() autoload()
construct() 객체가 인스턴스화되면 객체의 이 메서드가 먼저 호출됩니다.
destruct() 이 메서드는 객체가 삭제되거나 객체 작업이 종료될 때 호출됩니다.

class test1 { 
public function construct() { 
var_dump(function); 
} 
public function destruct() { 
var_dump(function); 
} 
} 
$t1 = new test1 ; 
unset($t1);

get은 존재하지 않는 속성을 읽으려고 할 때 호출됩니다.
존재하지 않는 속성에 값을 쓰려고 할 때 set이 호출됩니다.
isset은 존재하지 않는 속성을 감지하려고 할 때 호출됩니다.
unset은 존재하지 않는 속성을 설정 해제하려고 할 때 호출됩니다.

class test2 { 
public $name3; 
public function set($key, $value) { 
var_dump(function. ' 
KEY:' 
.$key.' 
Value:' 
.$value); 
} 
public function get($key) { 
var_dump(function. 'KEY:'.$key); 
} 
public function isset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
public function unset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
} 
$t =new test2 ; 
$t->name = "steven"; 
$t->name2; 
$t->name3; 
isset($t->name2); 
isset($t->name3); 
unset($t->name4);

sleep은 객체를 직렬화할 때 호출됩니다.
wakeup은 객체를 역직렬화할 때 호출됩니다.
주의할 점:
1. sleep()은 배열이나 객체를 반환해야 하며(보통 $this가 반환됨) 반환된 값은 다음과 같습니다. 직렬화된
값으로 사용됩니다.
이 값이 반환되지 않으면 직렬화가 실패합니다. 이는 역직렬화가 웨이크업 이벤트를 트리거하지 않는다는 의미이기도 합니다.
2. 직렬화는 기본적으로 할당된 속성을 저장합니다. 인스턴스화를 통해 콘텐츠를 할당하려면 sleep()에서 반환된 배열에 속성을 지정해야 합니다.
예를 들어 $id와 $id2의 차이입니다.

class test3 { 
public $name = "steven"; 
public $id = "1"; public $id2; 
public function sleep() { 
var_dump(function); // 序列化不成功.没有返回值.反序列也失败 // 
return array("name"); // 序列化成功.有返回值.反序列成功.id2属性能被恢复 // 
return array("name", "id2");// 序列化成功.有返回值.反序列成功.id2属性不能被恢复 
return array("name"); } 
public function testEcho() { 
var_dump($this->name); 
var_dump($this->id); 
var_dump($this->id2); 
} 
public function wakeup() { 
var_dump(function); 
$this->testEcho(); 
} 
} 
$t3= new test3 ; 
$t3->id2 = uniqid(); 
$t3s = serialize($t3); 
unserialize($t3s);

toString은 직접 호출되어야 합니다. 이 메소드는 객체를 인쇄할 때 호출됩니다.

class test4 { 
public function toString() { 
return "toString"; 
} 
} 
$t4 = new test4(); 
echo $t4; 
print $t4; 
var_dump($t4); 
print_r($t4);

call($func, $param)은 존재하지 않는 메소드를 호출하려고 할 때 호출됩니다.
이 메소드에는 두 개의 매개변수가 있어야 합니다. 첫 번째는 호출된 메소드의 이름이고, 두 번째는 호출된 메소드의 매개변수 배열입니다.
하위 클래스에 있는 상위 클래스의 비공개 메서드를 호출하거나 인스턴스에서 클래스의 보호되지 않는 메서드를 호출할 때
, call()은 다음과 같은 경우

class test5 { 
public function call($func, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
$t5 = new test5; 
$t5->echoTest('xx','xx','xx');

callStatic()이 호출되지 않는다는 점에 유의해야 합니다. try 존재하지 않는
staticmethod를 호출할 때 호출됩니다. 이 메서드에는 두 개의 매개 변수가 있어야 합니다. 첫 번째는 호출된 메서드의 이름이고 두 번째는 호출된 메서드의 매개 변수 배열입니다.
PHP5.3에 등장

class test51 { 
public function callStatic($fun, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
test51::test('xx','xx','xx');

set_state()는 var_export를 사용하여 인스턴스를 내보낼 때 호출됩니다. 이 메소드에는 내보낸 인스턴스의 모든 멤버 속성을 포함하는 배열인 매개변수가 있습니다.

class test6 { 
public function set_state($arr){ 
var_dump($arr); 
} 
} 
$t6 = new test6; 
$t6->age = "12"; 
var_export($t6, true); 
var_export($t6); 
eval(' 
$b=' 
.var_export($t6,true).';'); 
print_r($b);

clone() 인스턴스를 복제할 때 호출됩니다.

참고:

1. 객체 간 할당은 항상 주소 참조로 전달됩니다.
2. 실제 값으로 전달하려면 clone 키워드를 사용해야 합니다.
3 .clone은 인스턴스일 뿐입니다. 인스턴스의 멤버 속성도 인스턴스인 경우 이 멤버 속성은 여전히 ​​참조 메서드를 사용하여 새 인스턴스에 전달됩니다.
// 객체 간 할당은 항상 주소 참조로 전달됩니다. $t71 $t72의 age 속성은 동일합니다.

class test71 { 
public $age = 10; 
} 
$t71 = new test71(); 
$t72 = $t71 ; 
var_dump($t71->age) ; 
$t71->age =12 ; 
var_dump($t71->age) ; 
var_dump($t72->age) ; // 如果要以实际值来传递,则需要用到clone关键词 $t73 = clone $t71; $t71->age = 13 ; var_dump($t71->age) ; 
var_dump($t73->age) ; // 如果实例中的某个成员属性也是个实例,那么这个成员属性还是会以引用方法被传递到新的实例。

autoload() 함수를 생성할 때 해당 클래스가 없으면 호출됩니다. 으르르르르

위 내용은 PHP 매직 상수 소개 및 매직 함수 사용 코드 설명 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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