php __destruct 为啥通过 file_get_contents 得到不同的结果

Posted

技术标签:

【中文标题】php __destruct 为啥通过 file_get_contents 得到不同的结果【英文标题】:php __destruct why get different result by file_get_contentsphp __destruct 为什么通过 file_get_contents 得到不同的结果 【发布时间】:2021-05-05 06:56:52 【问题描述】:

hint.php 中的内容是“111”

<?php

class T
    public $filename = "hint.php";

    function __destruct() 
        var_dump(file_get_contents($this->filename));
    


new T();

得到了

string(3) "111"

而当我设置一个变量$t时,结果会不一样。

$t = new T();

得到了

string(0) ""

为什么会这样

【问题讨论】:

我无法重现您的结果。设置$t = new T();我仍然得到我的hint.php的内容。 我的php版本是PHP Version 7.3.1 系统是windows 【参考方案1】:

这是由bug in PHP 引起的。它已经存在了很长时间,而且看起来不会很快修复。

为避免此问题,请勿在关闭脚本中使用相对路径。

【讨论】:

以上是关于php __destruct 为啥通过 file_get_contents 得到不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

我可以信任调用 PHP __destruct() 方法吗?

在php中实现Serializable接口时正确调用__destruct方法?

PHP中的11个魔术方法总结:__construct,__destruct__call等

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)