首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

__construct()

Constructor

代码语言:javascript
复制
void __construct ([ mixed $args = "" [,  $... ]] )

PHP 5 allows developers to declare constructor methods for classes. Classes which have a constructor method call this method on each newly-created object, so it is suitable for any initialization that the object may need before it is used.

Note: Parent constructors are not called implicitly if the child class defines a constructor. In order to run a parent constructor, a call to parent::__construct() within the child constructor is required. If the child does not define a constructor then it may be inherited from the parent class just like a normal class method (if it was not declared as private).

Example #1 using new unified constructors

代码语言:javascript
复制
<?php
class?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's?constructor
}

//?In?BaseClass?constructor
$obj?=?new?BaseClass();

//?In?BaseClass?constructor
//?In?SubClass?constructor
$obj?=?new?SubClass();

//?In?BaseClass?constructor
$obj?=?new?OtherSubClass();
?>

For backwards compatibility with PHP 3 and 4, if PHP cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics.

Warning

Old style constructors are DEPRECATED in PHP 7.0, and will be removed in a future version. You should always use __construct() in new code.

Unlike with other methods, PHP will not generate an E_STRICT level error message when __construct() is overridden with different parameters than the parent __construct() method has.

As of PHP 5.3.3, methods with the same name as the last element of a namespaced class name will no longer be treated as constructor. This change doesn't affect non-namespaced classes.

Example #2 Constructors in namespaced classes

代码语言:javascript
复制
<?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
????}
}
?>

Destructor

代码语言:javascript
复制
void __destruct ( void )

PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence.

Example #3 Destructor Example

代码语言:javascript
复制
<?php
class?MyDestructableClass?{
???function?__construct()?{
???????print?"In?constructor\n";
???????$this->name?=?"MyDestructableClass";
???}

???function?__destruct()?{
???????print?"Destroying?"?.?$this->name?.?"\n";
???}
}

$obj?=?new?MyDestructableClass();
?>

Like constructors, parent destructors will not be called implicitly by the engine. In order to run a parent destructor, one would have to explicitly call parent::__destruct() in the destructor body. Also like constructors, a child class may inherit the parent's destructor if it does not implement one itself.

The destructor will be called even if script execution is stopped using exit(). Calling exit() in a destructor will prevent the remaining shutdown routines from executing.

Note: Destructors called during the script shutdown have HTTP headers already sent. The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache).

Note: Attempting to throw an exception from a destructor (called in the time of script termination) causes a fatal error.

← Autoloading Classes

Visibility →

代码语言:txt
复制
 ? 1997–2017 The PHP Documentation Group

Licensed under the Creative Commons Attribution License v3.0 or later.

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com