4

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)

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
Daniel Magliola
  • 30,898
  • 61
  • 164
  • 243

2 Answers2

5

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();
    }
}
Sirko
  • 72,589
  • 19
  • 149
  • 183
Vitaliy
  • 53
  • 2
  • 5
3

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

Tyler Carter
  • 60,743
  • 20
  • 130
  • 150
  • Thanks! That PHP.net article nails it. Unfortunately, it doesn't work with CakePHP, which is probably enumerating all methods of the Controller, instead of just trying to call it. Oh well, off to look for synonims to list :-) – Daniel Magliola Feb 20 '10 at 16:28