【问题标题】:FatFree Framework - The (unset) cast is deprecatedFatFree 框架 - (未设置的)演员已弃用
【发布时间】:2019-09-16 09:30:11
【问题描述】:

我有一个内置于 FatFree 框架的系统,在运行我的一个脚本时出现错误(错误如下)。

在研究中,我发现了两个与此相关的 github 帖子(如下所列),但无法弄清楚如何解决问题或在哪里进行更改以解决问题。谁能帮帮我?

https://github.com/bcosca/fatfree/issues/1080

https://github.com/SSilence/selfoss/issues/983

Internal Server Error

The (unset) cast is deprecated

[ctdata/lib/base.php:2032] Base->error(500,'The (unset) cast is deprecated')
[ctdata/lib/base.php:1899] Base->{closure}(8192,'The (unset) cast is deprecated','/home/ezcomp5/public_html/ctdata/lib/db/sql.php',110,array('class'=>'DB/SQL','func'=>NULL,'path'=>'./','auto'=>'/home/ezcomp5/public_html/ctdata/lib/','file'=>'/home/ezcomp5/public_html/ctdata/lib/db/sql.php'))
[ctdata/lib/base.php:1899] require()
[ctdata/index.php:37] spl_autoload_call('DB\SQL')

【问题讨论】:

    标签: php deprecated internal-server-error unset fat-free-framework


    【解决方案1】:

    只需升级您的 Fat-Free Framework 版本即可。 此错误已在 3.6.3 中修复。 见https://github.com/bcosca/fatfree-core/blob/master/CHANGELOG.md

    【讨论】:

    • 谢谢,因为我之前没有使用过fatfree,所以只是确认一下:我们应该下载所有文件github并覆盖现有的核心文件吗?请指教。
    • 没错。或者,如果你熟悉 Composer,你可以composer require bcosca/fatfree-core
    【解决方案2】:

    这仅仅是使用(unset) 强制 NULL 的弃用警告。

    type juggling

    例如

    $uselessCoercion = 'Hello';
    $uselessCoercion = (unset)$uselessStuff;
    
    // is the same as
    $uselessCoercion = NULL;
    

    注意。有人提到,在使用unset() 之前将变量设置为NULL 实际上是一种性能调整(尽管有点迂腐)。这样一来,原始值肯定会从内存中删除。

    来自文档的弃用说明:

    自 PHP 7.2.0 起,(未设置的)演员表已被弃用。请注意,(未设置)强制转换与将值 NULL 分配给变量或调用相同。自 PHP 8.0.0 起,(未设置的)演员表将被删除。

    如果您无法更改代码,您可以在 php.ini 中禁用它

    error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING
    

    理想情况下,您应该解决这些问题,但以上对于您想要隐藏任何坏蛋的生产服务器来说非常通用

    如果您无法修改 php.ini,那么也许您可以恢复到低于 7.2.0 的版本

    【讨论】:

    • unset($uselessCoercion)不一样。其他示例仍将保持 $uselessCoercion 已定义但具有空值,而 unset(...) 将完全删除变量,使其未定义。
    • 谢谢,我的错,我只是在学习垃圾收集。它没有“完全”删除,因为它仍然占用内存空间,因此如果迂腐的性能调整了你的东西,那么为什么在取消设置之前先将具有大结果的变量设置为 null 可能是明智的
    • 当然,内存中可能还有一些垃圾,但是对于代码的范围,它已经消失了,未定义。
    • 我刚刚通过在 ctdata 目录中创建一个内容为 error_reporting = E_ALL & ~E_DEPRECATION & ~E_NOTICE & ~E_WARNING 的 php.ini 文件进行检查,但我仍然收到相同的错误。
    • E_DEPRECATED抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多