2016-05-27 7 views
0

Dieser Code ist von osTicket, https://github.com/osTicket/osTicket/blob/1.9.x/main.inc.php,Warum kann ich eine PHP-Funktion in einer Klasse statisch aufrufen, ohne dass die Methode als statisches Schlüsselwort deklariert wurde?

/**** static functions ****/ 
    function start() { 
     // Prep basic translation support 
     Internationalization::bootstrap(); 

     if(!($ost = new osTicket())) 
      return null; 

     //Set default time zone... user/staff settting will override it (on login). 
     $_SESSION['TZ_OFFSET'] = $ost->getConfig()->getTZoffset(); 
     $_SESSION['TZ_DST'] = $ost->getConfig()->observeDaylightSaving(); 

     // Bootstrap installed plugins 
     $ost->plugins->bootstrap(); 

     // Mirror content updates to the search backend 
     $ost->searcher = new SearchInterface(); 

     return $ost; 
    } 

In einem anderen file, geschieht dies:

osTicket::start() 

Es funktioniert. Warum wird das statische Schlüsselwort nicht benötigt?

EDIT: Funktioniert das in anderen Sprachen?

+1

Sie können jede Objektmethode/Funktion statisch aufrufen, aber wenn diese Funktion '$ this' verwendet, erhalten Sie Warnungen über die Verwendung von' $ this' in einem statischen/Nicht-Objekt-Kontext. –

+0

Ist das nur in PHP? – johnny

+0

Nun, es ist in Ordnung in PHP. keine Ahnung von "allen" anderen Sprachen. –

Antwort

2

Aus historischen Gründen. PHP 4 hatte nicht das static Schlüsselwort und viele Codebasen verwendeten Mitglieder statisch. Es ist schwierig, eine solche alte Codebasis zu reparieren, und dies zu erzwingen hätte die Annahme verhindert.

+0

So hat es dann "nur funktioniert"? – johnny

+1

Ja, damals konnte man alle Methoden statisch und dynamisch aufrufen. solche Sachen waren möglich: 'Klasse C {Funktion m() {Echo isset ($ this)? 'dynamisch statisch'; } } Cm(); $ c = neues C; $ c-> m(); 'und Leute haben .. – johannes

Verwandte Themen