>백엔드 개발 >PHP 튜토리얼 >PHP 소멸자의 샘플 코드 공유

PHP 소멸자의 샘플 코드 공유

黄舟
黄舟원래의
2017-07-02 10:18:201146검색

PHP소멸자를 올바르게 이해하는 방법

Construct라는 클래스에서 함수를 선언하면 이 함수는 생성자로 간주되어 객체 인스턴스를 생성할 때 실행됩니다. 다른 함수와 마찬가지로 생성자에는 매개변수나 기본값이 있을 수 있습니다. 클래스를 정의하여 개체를 만들고 해당 속성을 모두 문에 넣을 수 있습니다.

PHP가 먼저 호출하는 destruct라는 함수를 정의할 수도 있습니다. 객체는 소멸됩니다.

상속은 클래스의 강력한 기능입니다. 한 클래스(하위 클래스/파생 클래스)는 클래스(상위 클래스/기본 클래스)의 다른 함수를 상속할 수 있습니다. 기본 클래스의 모든 속성 및 메서드를 사용하고 파생 클래스에 다른 속성 및 메서드를 추가할 수도 있습니다. 3.1.2에서 볼 수 있듯이 확장 키워드를 사용할 수도 있습니다.

생성자가 다른 메서드와 함께 상속되면 포함되지 않습니다. 객체를 생성할 때 실행됩니다.이 기능이 필요하면 사용해야 합니다. 2장에서 언급한 :: 연산자.
네임스페이스를 가리킬 수 있습니다. parent는 상위 클래스 네임스페이스를 가리키며, parent::construct를 사용하여 상위 클래스의 생성자를 호출할 수 있습니다. 언어는 클래스 뒤에 생성자를 지정합니다. 이전 버전의 PHP에서도 마찬가지였으며 이 메서드는 여전히 작동합니다. 즉, Animal 클래스의 이름을 지정하고 그 안에 Animal이라는 메서드를 생성하면 이 메서드가 생성자가 됩니다. 클래스에 클래스와 동일한 이름을 가진 생성자와 함수가 모두 있는 경우 PHP는 생성자로 처리합니다. 이로 인해 PHP 버전에서 작성된 이전 클래스를 계속 사용할 수 있습니다. 생성자를 사용해야 합니다.

PHP의 새로운 생성자 선언 방법을 사용하면 생성자가 속한 클래스에 관계없이 고유한 이름을 가질 수 있습니다. 이런 식으로 클래스 이름을 변경할 때 이름은 무엇입니까? 생성자의 이름을 변경할 필요가 없습니다.

다른 클래스 메서드와 마찬가지로 생성자에게 액세스 메서드를 제공할 수 있습니다. 액세스 메서드는 특정 범위 내에서 개체를 인스턴스화하는 기능을 통해 일부를 구현할 수 있습니다.

PHP 소멸자는 생성자와 달리 이를 호출하여 메모리에서 객체를 파괴합니다. 기본적으로 PHP는 객체 속성이 차지하는 메모리만 해제하고 객체와 관련된 리소스를 파괴합니다. 소멸자를 사용하면 객체를 사용한 후 임의의 코드를 실행하여 메모리를 지울 수 있습니다.

PHP가 스크립트가 더 이상 객체와 관련이 없다고 판단하면 함수의 네임스페이스 내에서 함수가 반환될 때 이러한 일이 발생합니다. 전역 변수의 경우 이는 스크립트 끝에서 발생합니다. 개체를 가리키는 변수를 할당할 수 있습니다. 일반적으로 변수를 NULL로 할당하거나

에서 호출합니다. 다음 예제에서는 클래스에서 인스턴스화된 개체 수를 계산합니다. Counter 클래스는 생성자에서 증가하기 시작하고 PHP 소멸자에서 감소합니다.

클래스를 정의하면 new를 사용하여 클래스의 인스턴스를 만들 수 있습니다. 클래스는 설계 도면이고 인스턴스는 조립 라인에 배치된 구성 요소입니다. New에는 클래스 이름이 필요하고 인스턴스 클래스의 인스턴스를 반환합니다. 생성자가 매개 변수를 요구하는 경우 new 뒤에 매개 변수를 입력해야 합니다.

 1 < ?php   
 2  3 class Counter { private static $count = 0;   
 4  5 function construct() { self::$count++; }   
 6  7 function destruct() { self::$count--; }   
 8  9 function getCount() { return self::$count; } }   
10 11 //建立第一个实例  12 13 $c = new Counter();  
14 15  //输出1   16 17 print($c->getCount() . "<br>\n");   
18 19 //建立第二个实例   20 21 $c2 = new Counter();   
22 23 //输出2   24 25 print($c->getCount() . "<br>\n");   
26 27 //销毁实例   28 29 $c2 = NULL;   
30 31 //输出1  32 33  print($c->getCount() . "<br>\n");   
34 35 ?>

새 PHP 소멸자 인스턴스를 생성하면 모든 속성을 저장할 메모리가 준비됩니다. 각 인스턴스에는 고유한 속성 집합이 있습니다. 그러나 이 메서드는 클래스의 모든 인스턴스에서 공유됩니다. 개발자는 메서드를 클래스의 생성자로 정의합니다. 생성자가 있는 클래스는 새 객체가 생성될 때마다 이 메서드를 호출하므로 객체를 사용하기 전에 일부 초기화 작업을 수행하는 데 매우 적합합니다.

참고:

생성자가 하위 클래스에 정의된 경우 상위 클래스의 생성자는 암시적으로 호출되지 않습니다. 상위 클래스의 생성자를 실행하려면 하위 클래스의 생성자에서

parent::construct()를 호출해야 합니다. 하위 클래스가 생성자를 정의하지 않으면 일반 클래스 메서드와 마찬가지로 상위 클래스에서 상속됩니다(private으로 정의되지 않은 경우).

예제 #1 새로운 표준 생성자 사용하기

<?phpclass BaseClass {  
function construct() {       
print "In BaseClass constructor\n";
   }
}class SubClass extends BaseClass {   
function construct() {
       parent::construct();       
       print "In SubClass constructor\n";
   }
}class OtherSubClass extends BaseClass {    
// inherits BaseClass&#39;s constructor}
// In BaseClass constructor$obj = new BaseClass();
// In BaseClass constructor
// In SubClass constructor$obj = new SubClass();
// In BaseClass constructor$obj = new OtherSubClass();?>
이전 버전과의 호환성을 위해 PHP 5가 클래스에서 constructor() 함수를 찾을 수 없고 상위 클래스에서 상속받지 않는 경우, 이전 버전을 찾아보십시오. 클래스와 동일한 이름을 가진 함수인 스타일 생성자. 따라서 호환성 문제가 발생하는 유일한 상황은 클래스에 construct()라는 메서드가 이미 있지만 다른 용도로 사용되는 경우입니다.

与其它方法不同,当 construct() 被与父类 construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT 错误信息

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

Example #2 Constructors in namespaced classes

<?php
namespace Foo;
class Bar {
    public function Bar() {
        // treated as constructor in PHP 5.3.0-5.3.2
        // treated as regular method as of PHP 5.3.3
    }
}
?>


析构函数 ¶

void destruct ( void )

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

Example #3 析构函数示例

<?php
class MyDestructableClass {   
function construct() {       
print "In constructor\n";       
$this->name = "MyDestructableClass";
   }   
   function destruct() {       
   print "Destroying " . $this->name . "\n";
   }
}$obj = new MyDestructableClass();?>

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

위 내용은 PHP 소멸자의 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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