2017-01-26 2 views
0

Ich habe 2 Klassenphp - Verwendung von Klassenmethoden in einer anderen Klasse mit globalen

app/Classes/ 
    | 
    |____ Helper/ 
    |  | 
    |  |____ Helper.php <- contain Helper Class 
    | 
    |____ User/ 
      | 
      |____ User.php <- contain User Class 

Und ich habe die Klassen-Dateien in den Autoloader Abhängigkeiten mit bA-4 hinzugefügt. so kann ich sie composer.json

{ 
    "autoload": { 
     "psr-4": { 
      "Classes\\": "app/Classes" 
     } 
    }, 
    "require": { 
     "vlucas/valitron": "1.3.*", 
     "ezimuel/php-secure-session": "dev-master" 
    } 
} 

Namespace Nachdem ich die composer.phar Datei aus dem Terminal abgeladen haben. In meinem bootstrap.php habe ich die Autoloader Abhängigkeiten

//bootstrap.php 
require_once APP_ROOT . '/vendor/autoload.php'; 

$helper = new Helper(); 
$user = new User(); 

und jetzt in meiner User Klasse muss ich die helper Klasse

namespace Classes\User; 

Class User 
{ 
    public function onlyAuthenticated() 
    { 
     if (!isset($_SESSION['user_id']) || empty($_SESSION['user_id'])) { 

      global $helper; 

      $helper->redirect('/index.php'); 
     } 
    } 
} 

Der gesamte Code funktioniert, aber ist es sicher global $helper; innerhalb der User Klasse zu benutzen? Ist es der richtige Weg?

Antwort

1

Sie müssen $helper als global deklarieren, wenn Sie es initialisieren, um später mit dem Schlüsselwort global darauf zuzugreifen.

//bootstrap.php 
... 
global $helper; 
$helper = new Helper(); 

Das heißt, sind Sie wahrscheinlich besser dran, es auf diese Weise nicht zu tun, zumindest für etwas, das tut, was ich Ihre Helper Klasse tut vermuten.

Sie können statische Funktionen in Helper deklarieren, die überall ohne globale Variablen verwendet werden können. Etwas wie:

class Helper{ //just some dummy code for demonstration purposes. 
    public static function redirect($url){ 
     header("Location: " $url); 
     exit(); 
    } 
} 

Dann können Sie es so nennen:

Helper::redirect('/index.php'); 

Hinweis, das ist weniger ausführlich und meiner Meinung nach klarer. Es hat auch den Vorteil, keine globalen Variablen zu benötigen.

+0

Yaa, das alles, was ich tat, ist 'Verwendung Classes \ Helper \ Helper gearbeitet hat;' und 'Helper :: redirect ('/ index.php');' –

Verwandte Themen