可以在 5.4.x 中禁用 PHP Traits 吗?

Posted

技术标签:

【中文标题】可以在 5.4.x 中禁用 PHP Traits 吗?【英文标题】:Can PHP Traits be disabled in 5.4.x? 【发布时间】:2015-09-07 05:39:20 【问题描述】:

我有一个使用 Rackspace Cloud Sites 的客户,他们在他们的平台上宣传 php 5.4,但我通过他们的在线支持得知无法使用特征。

使用特征时,我收到 500 错误并且发现代码没有问题,我要求他们的在线支持人员告知“在我们的环境中不允许这样做”。使用下面的基本 PHP 示例代码会导致 500 内部服务器错误:

class Base 
    public function sayHello() 
        echo 'Hello ';
    


trait SayWorld 
    public function sayHello() 
        parent::sayHello();
        echo 'World!';
    


class MyHelloWorld extends Base 
    use SayWorld;


$o = new MyHelloWorld();
$o->sayHello();

是否有某些原因会禁用特征,或者甚至可以禁用它们? phpinfo() 报告的版本是5.4.10。

【问题讨论】:

什么? ???这是我听过的最奇怪的事情。没有合理的理由禁用特征;这不像是一个安全关键功能。当您使用它时,不妨禁用类和接口。确定那个代表不是在背后说什么? @deceze 他们也是我的想法,因此也是这个问题。代表说他们不知道为什么,并且回应来自运营团队。我希望其他拥有 rackspace 云站点托管的人可以复制这个问题,也许其他人可能有原因。 这太疯狂了。我以前从未听说过这样的事情。如何禁用特定语言功能? 【参考方案1】:

在与 rackspace 支持进行了一些讨论之后,似乎问题在于 xcache 和某些项目(例如特征)的执行。将以下行添加到 .htaccess 解决问题:

php_flag xcache.cacher 0

似乎不是机架空间问题,而是 xcache 问题。

【讨论】:

你能问出什么问题吗? 他们目前正在运行 XCache 2.0.1,我建议这是导致问题的the bug。已修复,但不在他们使用的版本中。【参考方案2】:

无法禁用 PHP 特性。如果您对特征的使用有限,则可以注释掉“使用”语句。

【讨论】:

更多的是我使用了使用特征的包,所以它不是修改代码的真正选项。有趣的是,它会一直运行良好,直到您调用通过 trait 实现的方法。

以上是关于可以在 5.4.x 中禁用 PHP Traits 吗?的主要内容,如果未能解决你的问题,请参考以下文章

PHP系列之一traits的应用

PHP多继承实现--Traits

PHP的学习--Traits新特性

PHP中的traits简单理解

thinkphp5.0Traits引入

tinkphp5.0 traits 的引入