2010-12-28 3 views
0

J'ai une question stupide. Je continue d'essayer d'écrire mon cadre, mais ... quelque chose me manque. J'ai une classe de base Base.class.php, avec quelques fonctions. Quand, j'écris une autre classe SubBase.class.php, qui étend Base, j'essaie de définir une variable, qui doit utiliser dans la classe de base, dans une fonction statique (peut-être). Quelque chose comme çaPHP: Utilisation de la fonction statique

class Base { 
public $vars; 
public function GetA() { 
    return $this->vars; 
} 
} 


public SubBase extends Base { 
public function __construct() { 
    $this->vars = array(); 
} 
} 

Mais, je manque quelque chose ... En rôle, mon sous-base est de mon sous-page Web, Base est classe printHTML. J'essaie de définir un titre sur mon site Web, avec ma classe Base, qui définit $ this-> vars dans ma classe SubBase o.O S'il vous plaît, dites-moi si je me trompe, et laissez-moi savoir comment écrire ceci. Je wonna juste écrire

<title> <?php echo Base::GetTitle(); ?> </title> 

et montrer à

+1

Je ne vois aucune fonction statique nulle part dans votre code. – BoltClock

+1

Quelle version de PHP utilisez-vous? Les versions antérieures à PHP 5.3 ne prennent pas en charge la liaison statique tardive (LSB). – alexn

+0

Où est 'GetTitle()' dans votre classe? –

Répondre

0

Eh bien, vous devriez jeter un oeil à des propriétés et des méthodes statiques:. http://php.net/manual/en/language.oop5.static.php

Pour accomplir ce que vous voulez, vous pouvez essayer ce qui suit:

class Base { 

    //-------------------------------- 
    // Declare static property 
    public static $title = ''; 

    //-------------------------------- 
    // Declare static method 
    public static function GetTitle() { 
     return self::$title; 
    } 
} 

public SubBase extends Base { 

    //-------------------------------- 
    // Construct which overwrites 
    // Base::$title 
    public function __construct($newTitle){ 
     self::$title = $newTitle; 
    } 
} 

//-------------------------------- 
// Instantiate your SubBase object 
$subPage = new SubBase($newTitle = 'Welcome to my sub page'); 

//-------------------------------- 
// And in your HTML, use 
<title> <?php echo SubBase::GetTitle(); ?> </title> 

Notez que j'ai utilisé SubBase :: GetTitle(); et pas Base :: GetTitle(); Si vous utilisez Base :: GetTitle(), votre sortie sera vide car vous utilisez la valeur donnée à la classe de base. Dans mon exemple, son:

public static $title = ''; 

Toutefois, lorsque vous instancier votre classe de sous-base, vous fournir un paramètre « newTitle $ », qui remplace alors la valeur vide.

Idéalement, cela devrait fonctionner. Cependant, je vous recommande d'en apprendre plus sur l'utilisation des propriétés et des méthodes statiques.

Espérons que cela aide.

+0

Je vais ça, je ne peux pas utiliser ma sous-classe (SubBase), parce que chaque page est une nouvelle sous-classe (SubBase2, SubBase3) Classe de base C'est pourquoi je ne peux pas l'utiliser, mais merci beaucoup OV Web Solutions. Je lis le manuel de php peu de temps, mais je ne peux pas trouver rien d'utile. – pr4s40

+0

Solutions Web OV c'est le problème, mais une solution ne peut pas trouver ... je pense ... que la fonction statique n'est pas une meilleure solution, mais j'espère qu'il y en a une de toutes ... – pr4s40

Questions connexes