不能在 php 中将函数命名为 default


Can't have function named default in php

好吧,这非常出乎意料,这让我很恼火。我在所有类中都有名为 default() 的函数。但是,由于某种原因,我不能打电话。我想这是因为 switch 语句中的"default:"(我根本不使用)。

我不能在 php 中命名我的函数 default() 真的是真的还是我做错了什么?

这是错误:

Parse error: syntax error, unexpected T_DEFAULT, expecting T_STRING in 
C:'Users'Jinxed'Desktop'WebTrgovina'app'c'Controller.c.php on line 8

这是有问题的代码:

<?php
abstract class Controller {
    protected $view;
    function __construct() {
    }
    abstract function default();
    function getView(){
        return $this->view;
    }
}

当我将默认重命名为其他名称时,代码工作正常,但这很烦人,是否有任何解决方案可以将函数命名为 default()?

default是PHP中的一个保留字。

以下是列表: http://www.php.net/manual/en/reserved.keywords.php

不能将保留字用作类函数。但是,您可以使用__call:

<?php
abstract class Controller {
    public function _default($some, $args) {}
    public function __call($name, $arguments) {
        if ($name === 'default') {
            //return call_user_func_array(array($this, '_default'), $arguments); // has args
            return $this->_default(); // simpler
        }
    }
}

这将允许您做$foo->default().不过,更好的主意是不要选择依赖于使用保留字作为方法名称的实现/api。

它在保留关键字列表中,所以没有什么意外。 如果您确实需要这些名称,可以使用__call - 有关示例,请参阅关键字页面上的评论。

是的,您不能有一个名为 default 的函数。烦人,但那是PHP。

我想

为 AD7six 的答案做出贡献(这应该是一个评论,但我不能),并补充说,如果您使用支持 PHPDoc 的 IDE,您可以在类声明之前添加它,使其自动完成知道这些假方法的存在。

/**
 * show off @method
 * @method whateverItReturns default()
 */
class foo {
...