失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php魔术方法构造函数和析构函数 php魔术构造函数

php魔术方法构造函数和析构函数 php魔术构造函数

时间:2024-01-10 01:36:47

相关推荐

php魔术方法构造函数和析构函数 php魔术构造函数

php教程|php手册

php

php教程-php手册

php魔术方法——构造函数和析构函数,php魔术构造函数

导航源码下载,ubuntu比例放大,cmd如何进入tomcat,爬虫游戏代码,php手册最新中文版下载,云龙区seo哪家公司好lzw

php有一类很神奇的方法,这些方法是保留方法,通常不会在外部被显式调用,他们使用双下划线(__)开头,他们被称为魔术方法(Magic Methods)。php官方也不建议定义其他双下划线开头的方法。

康辉旅行社 源码,Ubuntu主分区和,tomcat9安装版配置,爬虫技术软件下载,大龄php程序员失业了,外贸seo求职lzw

这次介绍最常见的魔术方法:构造函数和析构函数。

php免费问答源码,ubuntu如何加入中文,js前端爬虫库,php老高,seo网页指标lzw

1. 构造函数(__construct)

void __construct ([ mixed $args [, $... ]] )

构造函数:拥有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象前做一些初始化服务。

注意:

1. clone并不会调用构造函数

2. 如果子类定义了构造函数,则不会隐式调用父类的构造函数

3. 子类的构造函数允许和父类的构造函数参数不一致

4. 如果子类没有定义构造函数,php会尝试寻找父类的构造函数

5. 如果父类没有定义构造函数,使用parent关键字显式调用父类构造函数,会导致致命错误

1 <?php 2 3 class P{ 4 5public function __construct(){ 6 echo __CLASS__ . "\n"; 7} 8 9 }10 11 class C1 extends P{12 13public function __construct(){14 echo __CLASS__ . "\n";15}16 17 }18 19 class C2 extends P{20 21public function __construct(){22 parent::__construct();23 echo __CLASS__ . "\n";24}25 26 }27 28 class C3 extends P{29 30 }31 32 // P33 $ins = new P();34 35 // Nothing36 $ins2 = clone $ins;37 38 // C139 new C1();40 41 // P42 // C243 new C2();44 45 // P46 new C3();

除了魔术方法的构造函数,php还支持与类名相同的构造函数,不过优先级比魔术方法低:

1 C3();32}33 34 }35 36 // C1237 new C1();38 39 // C2140 new C2();41 42 // C3243 // C3144 new C3();

php5.3.3之后,在命名空间之内使用与类名同名的方法,不再作为构造函数,命名空间之外不变:

1 <?php 2 3 namespace N; 4 5 class C{ 6 7public function C(){ 8 echo __CLASS__ . "\n"; 9} 10 11 }12 13 // Nothing14 new \N\C();

构造函数可以用全部三个访问控制修饰符,如单例模式:

1 <?php 2 3 class Single{ 4 5public static function getInstance(){ 6 static $ins = null; 7 if(empty($ins)){ 8 $ins = new self(); 9 } 10 return $ins;11} 12 13private function __construct(){14 echo __CLASS__ . "\n";15} 16 17 }18 19 // Single20 Single::getInstance();

2. 析构函数(__destruct)

void __destruct ( void )

析构函数:析构函数会在某个对象的引用被全部删除或对象被显示销毁时执行。

注意:

1. 同构造函数类似,父类的析构函数并不会被引擎暗中调用,必须显式调用parent::__destruct

2. exit和die并不能阻止析构函数的执行

3. 致命错误会阻止析构函数的执行

4. 在析构函数中调用exit,可以阻止其他未执行的析构函数的执行

5. 如果父类没有定义析构函数,使用parent关键字显式调用父类析构函数,会导致致命错误

<?phpclass P{ function __destruct(){ echo get_class($this) . "\t" . __CLASS__ . "\n"; } }class C1 extends P{ function __destruct(){ echo get_class($this) . "\t" . __CLASS__ . "\n"; } }class C2 extends P{ function __destruct(){ parent::__destruct(); echo get_class($this) . "\t" . __CLASS__ . "\n"; } }class C3 extends P{}$insP = new P();$ins1 = new C1();$ins2 = new C2();$ins3 = new C3();/**输出:C3 PC2 PC2 C2C1 C1P P**/

如果觉得《php魔术方法构造函数和析构函数 php魔术构造函数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。