为什么不能在控制器(可能在其他地方)中将Codeigniter函数命名为"new" ?
public function new()
{
$this->load->view('posts/new');
}
导致错误:
解析错误:语法错误,意想不到的'new' (T_NEW),期望标识符(T_STRING)
您不仅可以在Codeigniter
中这样做,而且在您编写的所有PHP中都应该throw
出错。new
是PHP
中的保留字。您可以在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关键词