名为'new'的编码器函数


Codeigniter function named 'new'

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

public function new()
{
    $this->load->view('posts/new');
}

导致错误:

解析错误:语法错误,意想不到的'new' (T_NEW),期望标识符(T_STRING)

您不仅可以在Codeigniter中这样做,而且在您编写的所有PHP中都应该throw出错。newPHP中的保留字。您可以在PHP中找到更多关于保留字的信息。

人们通常通过在函数名前加一个下划线(_)来克服这个问题。

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

对于那些说你做不到的人,我说我可以。什么人吗?

$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)

他们真正应该修复的,还有include, require等。完全不同的语境。

UPDATE FOR CI SCOPE

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

私有函数

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

private function _utility()
{
   // some code
}

尝试通过URL访问它,像这样,将无法工作:

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

我之所以提到这个是因为OP声明使用CI

new是PHP中的保留关键字。

在PHP文档中阅读更多信息。

PHP关键词