Freitag, April 10, 2020

PHP – Making Class-Objekt Global Gesamte Anwendung?

Ist es ein einfacher Weg, um ein class-Objekt global für eine gesamte Anwendung in PHP? Ich brauche meine Klasse nur einmal instanziiert werden während der gesamten Anwendung und es funktioniert 100%.

Dank.

BEARBEITEN

Beschlossen das Singleton-Muster ist die beste Idee für das, was ich brauche, und wurde aufgefordert, fügen Sie ein wenig code, so ist es hier:

Mithilfe der Klasse in meiner app:

function catp_check_request(){
    $catp=catp::getInstance();

    $dlinks=array();
    $ddlinks=array();

    foreach($catp->rawlinks->link as $rawlink){
        $dellink="catp-del-{$rawlink->name}";
        array_push($dlinks,$dellink);
    }

    //More stuff..
}

Deklaration der Klasse:

class catp {

private static $instance;
private $errors;
private $status_messages;
private $plugin_name;
private $plugin_shortname;
private $links;
private $linksurl;
private $rawlinks;

private function __construct(){}

public static function getInstance() {
    if (self::$instance == null) {
        self::$instance = new catp();
    }
    return self::$instance;
}

public function catp(){
    $this->errors=false;
    $this->plugin_name='CloakandTrack Plugin';
    $this->plugin_shortname='CaTP';
    $this->status_messages=array(
        'updated' => 'You just updated',
        'enabled' => 'You just enabled',
        'disabled' => 'You just disabled',
        'debug' => 'Plugin is in debug mode'
    );
    $this->linksurl=dirname(__FILE__).'/links.xml';
    $this->rawlinks=simplexml_load_file($this->linksurl);
    $this->links=$this->catp_parse_links($this->rawlinks);
}

//More functions..

}
InformationsquelleAutor Jared | 2011-07-17

3 Kommentare

  1. 8

    Müssen Sie die singleton-Objekt.

    class YourClass { 
        private $_instance = null;
    
        public static function getInstance() {
            if (self::$_instance == null) {
                self::$_instance = new YourClass();
            }
            return self::$_instance;
        }
    }
    
    //to get your instance use
    YourClass::getInstance()->...;

    Überprüfen Sie diesen link für mehr details http://www.php.net/manual/en/language.oop5.patterns.php#language.oop5.patterns.singleton

    • Das sieht aus wie genau das was ich brauche. Ich habe versucht, meinen Wechsel-code-über-ähnlich wie der link, den Sie mir mit, aber nun bin ich daran, diese Arten von Fehlern: Fatal error: Cannot access private property catp::$rawlinks in . . . – Ist dies etwas, das passiert Häufig? Es scheint, jede variable ist tatsächlich wieder NULL.
    • Könnten Sie zeigen Ihr Beispiel mit der Deklaration der Klasse?
    • Sie brauchen, um Ihre Variablen in der Klasse public oder schreiben Sie get-Methode für jeden. public $rawlinks; oder public function getRawlinks() { return $this->rawlinks; }
    • Edit: Herausgefunden, mein problem, thanks a million!
    • Vielleicht müssen Sie deklarieren $_instance mit static. Ich bin kein PHP-Mann, aber in mehreren anderen Sprachen, die ich verwendet habe, ist die Instanz-Variablen zugegriffen werden kann in statischen Funktionen.
  2. 2

    Sehen die singleton-Muster auf SO (und in welchen Fällen es gilt als schlechte Praxis).

    Können Sie erwägen, auch mit Registrierung.

    Beachten Sie, dass Ihr problem könnte sein, eine architektonische, vielleicht gibt es bessere Möglichkeiten das problem zu lösen, die Sie Gesicht, z.B. dependency-injection-container.

Kostenlose Online-Tests