为什么不能在控制器(以及可能的其他地方)中将Codeigniter函数命名为“new”?
Int32
导致错误:
解析错误:语法错误,意外'新'(T_NEW),期待标识符(T_STRING)
答案 0 :(得分:2)
您不仅可以在Codeigniter
中执行此操作,而且在您编写的所有PHP中都应该throw
出错。 new
是PHP
中的保留字。您可以在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)