PHP Doku:: Liste der Schlüsselworte - reserved.keywords.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchAppendicesListe der reservierten WörterListe der Schlüsselworte

Ein Service von Reinhard Neidl - Webprogrammierung.

Liste der reservierten Wörter

<<Liste der reservierten Wörter

Vordefinierte Klassen>>

Liste der Schlüsselworte

Die folgenden Begriffe haben in PHP eine spezielle Bedeutung. Einige von ihnen sehen aus wie Funktionen, Konstanten usw., in Wirklichkeit handelt es sich aber um Sprachkonstrukte. Keines der folgenden Worte kann als Name für eine benutzerdefinierte Konstante, Klasse, Funktion oder Methode genutzt werden. Die Nutzung als Variablenname ist in der Regel möglich, sollte aber unterlassen werden um Verwirrung zu vermeiden.

PHP Schlüsselworte
abstract (ab PHP 5) and array() as break
case catch (ab PHP 5) cfunction (nur PHP 4) class clone (ab PHP 5)
const continue declare default do
else elseif enddeclare endfor endforeach
endif endswitch endwhile extends final (ab PHP 5)
for foreach function global goto (ab PHP 5.3)
if implements (ab PHP 5) interface (ab PHP 5) instanceof (ab PHP 5)
namespace (ab PHP 5.3) new old_function (nur PHP 4) or private (ab PHP 5)
protected (ab PHP 5) public (ab PHP 5) static switch throw (ab PHP 5)
try (ab PHP 5) use var while xor
Konstanten zur Kompilezeit
__CLASS__ __DIR__ (ab PHP 5.3) __FILE__ __FUNCTION__ __METHOD__
__NAMESPACE__ (ab PHP 5.3)
Sprachkonstrukte
die() echo() empty() exit() eval()
include() include_once() isset() list() require()
require_once() return() print() unset()

Ein BenutzerBeitrag:
- Beiträge aktualisieren...
Bob
6.09.2009 11:02
There are some cases when you need to use a reserved keyword or language construct as a class method name. In this instance, there is very little chance of namespace conflicts (as the class itself acts as a namespace). If you try to define the method the old way, you will get an unexpected token error.

There is an unobtrusive, and very useful way to use a reserved keyword for a method name. For example, you want to define two class methods 'list' and 'unset' (these two are language builtins and normally not allowed for method names).

<?php
class MyClass
{
   
// Define MyClass::unset() with a different name, e.g. 'rm'
   
public function rm($arg)
    {
       
/* code... */
   
}
   
// Define MyClass::list() with a different name, e.g. 'ls'
   
public function ls($arg = null)
    {
       
/* code... */
   
}
   
// Now define a __call() method (requires PHP > 5.2.3 to take effect)
   
public function __call($func, $args)
    {
        switch (
$func)
        {
            case
'list':
                return
$this->ls((isset($args[0]))? $args[0]: null);
            break;
            case
'unset':
                return
$this->rm($args[0]);
            break;
            default:
               
trigger_error("Call to undefined method ".__CLASS__."::$func()", E_USER_ERROR);
            die ();
        }
    }
}
?>

The only caveat is that to use the long method names, you need PHP > 5.2.3. However, a nice feature is that if you are using an older version than 5.2.3, all of the __call() stuff is ignored and the class will behave as expected (in other words, it degrades gracefully).

You also need to be aware of the methods' expected arguments. MyClass::ls()'s argument is optional, so the extra isset() check is required. If your methods take more arguments, they will need to be manually dereferenced from the $args array, e.g. <?php return $this->my_func($args[0], $args[1], $args[2]);?> for 3 required arguments.

This is a nice trick, and can let you code better APIs for newer versions of PHP. However, if this script is to be run on older PHP installations, be very sure to use the short method names.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)