마법 상수
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);
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) ; // 如果实例中的某个成员属性也是个实例,那么这个成员属性还是会以引用方法被传递到新的实例。
위 내용은 PHP 매직 상수 소개 및 매직 함수 사용 코드 설명 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!