Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to "escape" a method name in PHP, to be able to have a method name that clashes with a reserved keyword?

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)

like image 926
Daniel Magliola Avatar asked Feb 28 '23 12:02

Daniel Magliola


2 Answers

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();
    }
}
like image 92
Vitaliy Avatar answered Apr 26 '23 15:04

Vitaliy


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

like image 40
Tyler Carter Avatar answered Apr 26 '23 15:04

Tyler Carter