可以在 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章