问题
I'm doing MVC in PHP, and i'd like to have a list() method inside my Controller, to have the URL /entity/list/parent_id, to show all the "x" that belong to that parent.
However, I can't have a method called list(), since it's a PHP reserved keyword.
In VB.Net, for example, if I need to have something with a name that clashes with a reserved keyword, I can wrap it in [reserved_name].
In SQL, you can do the same thing.
In MySQL, you use the backtick `
Is there some syntax in PHP that specifies "treat this as an identifier, not as a keyword"?
(NOTE: I know I can use routes to do this without having a list() method. I can also simply call the action something else. The question is whether PHP provides this kind of escaping)
回答1:
With variable names you can use the bracket signs:
${'array'} = "test";
echo ${'array'};
But PHP does not provide a method for escaping function names.
If you want a 'user-defined' way of getting around this, check out this comment:
http://www.php.net/manual/en/reserved.keywords.php#93368
回答2:
You can use __call()
method to invoke private or public _list()
method which implements your functionality.
/**
* This line for code assistance
* @method array list() list($par1, $par2) Returns list of something.
*/
class Foo
{
public function __call($name, $args)
{
if ($name == 'list') {
return call_user_func_array(array($this, '_list'), $args);
}
throw new Exception('Unknown method ' . $name . ' in class ' . get_class($this));
}
private function _list($par1, $par2, ...)
{
//your implementation here
return array();
}
}
来源:https://stackoverflow.com/questions/2302771/is-it-possible-to-escape-a-method-name-in-php-to-be-able-to-have-a-method-nam