2010-05-14 22 views
0

Voici la situation -je créer une instance d'une classeExiste-t-il un moyen de définir une variable globale accessible depuis une méthode de classe?

$newobj = new classname1; 

J'ai une autre writtern de classe ci-dessous et je veux cette classe pour accéder à l'objet ci-dessus

class newclass { 
    public function test() { 
     echo $newobj->display(); 
    } 
} 

Il est interdit , existe-t-il un moyen de définir une variable globalement à travers une classe?

+3

ne semble pas une bonne idée de –

+0

Ce n'est pas toujours une mauvaise idée, que $ newobj soit une instance d'une classe de base de données, alors c'est plutôt utile – Harmen

+0

dans ma condition – Starx

Répondre

1

Faire l'instance une approche globale:

$newobj = new classname1; 

class newclass { 
    public function test() { 
     global $newobj; 
     echo $newobj->display(); 
    } 
} 

Depuis que je suis un downvote pour la première ligne, je l'ai enlevé.

+4

pas besoin du premier global. le mot-clé global ne fonctionnera que dans les fonctions – knittl

0

Pourrait utiliser le singleton pattern. Ce est fondamentalement une classe qui crée une instance de lui-même et les appels ultérieurs auront accès à cette instance et donc la réalisation de ce que je pense que vous pourriez être à ...

6

Il est permis, mais vous devez utiliser la syntaxe appropriée: soit le mot-clé global ou $GLOBALS superglobale:

http://es.php.net/manual/en/language.variables.scope.php

http://es.php.net/manual/en/reserved.variables.globals.php

<?php 

class classname1{ 
    private $id; 
    public function __construct($id){ 
     $this->id = $id; 
    } 
    public function display(){ 
     echo "Displaying " . $this->id . "...\n"; 
    } 
} 
$newobj = new classname1(1); 

class newclass { 
    public function test() { 
     global $newobj; 
     echo $newobj->display(); 
    } 
    public function test_alt() { 
     echo $GLOBALS['newobj']->display(); 
    } 
} 

$foo = new newclass; 
$foo->test(); 
$foo->test_alt(); 

?> 

Cependant, les variables globales doivent toujours être utilisées avec précaution. Ils peuvent conduire à un code difficile à comprendre et à maintenir et à des bogues difficiles à localiser. Il est normalement plus facile de passer simplement les arguments requis:

<?php 

class classname1{ 
    private $id; 
    public function __construct($id){ 
     $this->id = $id; 
    } 
    public function display(){ 
     echo "Displaying " . $this->id . "...\n"; 
    } 
} 
$newobj = new classname1(1); 

class newclass { 
    public function test(classname1 $newobj) { 
     echo $newobj->display(); 
    } 
} 

$foo = new newclass; 
$foo->test($newobj); 

?> 

Last but not least, vous cherchez peut-être le modèle POO singleton:

http://en.wikipedia.org/wiki/Singleton_pattern

0

vous pouvez également hériter votre newclass de classname1 et alors vous serez en mesure d'appeler les méthodes de la classe « classname1 » comme ceci:

 

class newclass extends classname1 { 
    public function test() { 
     echo parent::display(); 
    } 
}