好吧,这非常出乎意料,这让我很恼火。我在所有类中都有名为 default() 的函数。但是,由于某种原因,我不能打电话。我想这是因为 switch 语句中的"default:"(我根本不使用)。
我不能在 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()?
default
是PHP中的一个保留字。
以下是列表: http://www.php.net/manual/en/reserved.keywords.php
不能将保留字用作类函数。但是,您可以使用__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。
它在保留关键字列表中,所以没有什么意外。 如果您确实需要这些名称,可以使用__call
- 有关示例,请参阅关键字页面上的评论。
是的,您不能有一个名为 default
的函数。烦人,但那是PHP。
我想
为 AD7six 的答案做出贡献(这应该是一个评论,但我不能),并补充说,如果您使用支持 PHPDoc 的 IDE,您可以在类声明之前添加它,使其自动完成知道这些假方法的存在。
/**
* show off @method
* @method whateverItReturns default()
*/
class foo {
...