Codeigniter函数名为'new'

时间:2015-08-08 00:53:25

标签: php codeigniter keyword reserved-words

为什么不能在控制器(以及可能的其他地方)中将Codeigniter函数命名为“new”?

Int32

导致错误:

  

解析错误:语法错误,意外'新'(T_NEW),期待标识符(T_STRING)

3 个答案:

答案 0 :(得分:2)

您不仅可以在Codeigniter中执行此操作,而且在您编写的所有PHP中都应该throw出错。 newPHP中的保留字。您可以在PHP here中找到有关保留字的更多信息。

人们通常会尝试通过在函数名称前放置一个下划线(_)来克服这个问题。

function _new() 
{
    echo "Hello!";
}

答案 1 :(得分:2)

对于那些说你无法做到的人,我说我可以。任何人?

$test = new Test();
$test->new();

class test{

    public function __call($method, $args){
        if( $method == 'new' ){
            echo 'Hello World';
        }else{
            trigger_error('Call to undefined method '.__CLASS__.'::'.$method,E_USER_ERROR);
        }
    }
}

魔术!

虽然我应该注意Codeigniter的Router类可能不会找到以这种方式定义的方法。所以它并不是真正的解决方案。但正如其他人在PHP语言本身中提到它的关键字(或构造)。

就个人而言,我可以理解限制对象使用的新内容,但empty()总是让我有点生气。

Parse error: syntax error, unexpected 'empty' (T_EMPTY), expecting identifier (T_STRING)

他们应该真正解决这个问题,包括需要等等。完全不同的背景。

更新CI范围

来自https://ellislab.com/codeigniter/user-guide/general/controllers.html

私人功能

  

在某些情况下,您可能希望某些功能对公众隐藏   访问。要将函数设为私有,只需添加下划线即可   名称前缀,不会通过URL请求提供。例如,   如果你有一个功能。

private function _utility()
{
   // some code
}
  

尝试通过URL访问它,就像这样,不起作用:

example.com/index.php/blog/_utility/

我只提到这一点,因为OP使用CI

答案 2 :(得分:1)

new是PHP中的保留关键字。

PHP docs中了解更多相关信息。

PHP keywords