Search code examples
phpoopkeywordphp4

Method name clashing with language construct


I simply want to name a method in my class list(). If I try and do so:

class MyClass {

  function list () {
    // Do some stuff here
  }

}

...I get a parse error (Unexpected T_STRING...). The same is true if I use echo or print - so I am guessing that I am not allowed to name a class method the same as a language construct, and while I cannot find any documentation that explicitly states this to be the case, I suppose it does make sense.

My question is, does anyone know of a work around to this, that will work in PHP 4.3.10? I know this can be done in PHP 5.3+ with closures (or I assume it can, I haven't actually tried) No versions of PHP to date support doing this with closures, but can anyone think of a work-around that does not rely on this, baring in mind that it is the method name that is important here?

EDIT N.B.

I am fully aware of how ancient and dead PHP4 is, but I have no option for this particular project. It is to be run on a platform distributed with PHP 4.3.10, which is a very low resource BusyBox platform with a MIPS processor, for which no compilers are provided. I have managed to create a cross-compiler and successfully build PHP 5.2 for it (I haven't tried 5.3 yet, it would probably involve compiling a newer Apache as well) but regardless of this, the manufacturer insist that this invalidates their warranty.


Solution

  • The dilemma you face will stay until you choose A or B.

    • A: Choose another function name, one that is not a reserved word.

    • B: Change PHP so that it provides the language features you need.

    __call is not available in PHP 4. list is a reserved word since long time.

    And you have not outlined what your specific problem with the class interface is, so I don't see much room for more alternatives.

    As B does not look like a real option here, you need to take A.

    Hope this helps that you can come to a conclusion.