3

好的,这是非常出乎意料的,这让我很恼火。我的所有课程中都有名为 default() 的函数。但是,由于某种原因,我不能调用它。我猜这是因为 switch 语句中的“默认:”(我根本不使用)。

我不能在 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()?

4

5 回答 5

8

default是 PHP 中的保留字。

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

于 2012-05-01T09:39:10.290 回答
7

您不能将保留字用作类函数。但是,您可以使用__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。

于 2012-05-01T09:49:52.240 回答
3

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

于 2012-05-01T09:39:25.807 回答
2

是的,你不能有一个名为default. 烦人,但那是 PHP。

于 2012-05-01T09:38:44.580 回答
0

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

/**
 * show off @method
 * @method whateverItReturns default()
 */
class foo {
...
于 2015-11-16T02:13:53.460 回答